你得知道rlogin。

你得知道rlogin。

我只是对此感到好奇。有时我会以 SSH 身份运行,然后以用户身份运行登录。ssh [email protected]sudo -iroot

现在我想断开连接并返回原始主机。我通常输入exit命令或Ctrl+D热键两次以返回。

我很好奇是否可以一步完成此操作,无论您sudo在远程连接中使用了多少次?

答案1

您应该能够使用~+.组合键来完成此操作。无论其中有多少个不同的用户会话,这都应该完全退出 ssh 会话。

如果您使用跳转主机和/或终端服务器来访问您的服务器,那么您需要添加~到序列中。因此,如果您在登录服务器之前通过 SSH 连接到跳转主机,则与服务器断开连接的顺序将是~+ ~+ .。旧式的 telnet 和串行连接也有此转义选项。对于该连接,转义字符从(默认)更改为。ssh -e @ [email protected]~@

答案2

你得知道rlogin

rloginSSH 具有旧 BSD和程序的语义rsh。 OpenSSH 手册没有记录这些语义,就像商业 Unices 的旧手册rlogin中记录的那样。rsh这些语义的一部分是转义序列存在于交互式rlogin会话中。

转义序列以转义字符,后跟另一个确定实际序列的字符。它们由 SSH 连接的本地客户端制定。为了使转义字符在大多数情况下都能被远端透明地使用,它们是仅有的输入换行符后立即被识别。此外,双转义字符是映射到向远程端发送单个转义字符的转义序列,因此如果需要,仍然可以在换行符之后立即发送转义字符。 (这是一个常见的例子爆破!我以为我按下了那个按钮。再按一次。用户界面语义。 ☺)

对您来说特别重要的转义序列是转义字符后跟.句号。这将断开与本端的 SSH 连接。

OpenSSH 手册中的一个重要遗漏rlogin是,如果有一个连接链,则可以使用加倍机制来确保转义序列由链中任何连续的 SSH 客户端处理一个需要。

因此(例如)在主机 A 上,如果用户使用 SSH 登录到主机 B,然后从那里使用 SSH 登录到主机 C,则可以在 B→C 连接上执行本地断开连接,从而保留 A→B连接完好无损,通过键入(紧接在换行符之后)转义字符两次进而.。 A→B 连接将其解码为要发送的单个转义字符,后跟.,B→C 连接又将其视为命令本地启动的断开连接的转义序列。这可以以明显的逻辑方式进行扩展。

转义字符本身默认是波浪号,~尽管可以按照文档所述通过两种方式进行更改。请注意,为了在具有死键的键盘布局上键入此内容,必须在该~键(其本身可能是和弦,需要修饰键,具体取决于键盘布局)后面跟随空格键,以便本地 SSH 客户端甚至可以看到首先是来自终端的交互式输入中的波浪号字符。因此,键入断开转义序列(在换行符之后)将为~ .,并且一跳的本地断开连接也类似为~ ~ .

进一步阅读

  • “逃脱序列”rlogin用户手册。 HP-UX 11i 版本 2。惠普。 2003 年 8 月。
  • “中止rlogin连接”Solaris 高级用户指南。 806-7612-11。太阳微系统公司。 2002年。
  • 丹尼尔·巴雷特、理查德·西尔弗曼和罗伯特·伯恩斯 (2005)。 “高级客户端使用:逃逸”。 SSH,安全 Shell:权威指南。 ISBN 9780596008956。奥莱利媒体。第 299-302 页。

答案3

答案可能是否定的。

同时退出这两个会话可能会在某些时候打破一些假设或最佳实践。例如,如果您在后台执行某些作业,bash shell 会发出一些警告。此外,shell 历史记录可能会丢失。

Jesse_b 提到的转义键提示很好,但有上面的缺点

如果您事先知道不想按 Ctrl-D 两次,则可以调用:

 exec sudo -i

但它仍然存在上面提到的一些缺点。

Ctrl-D 两次绝对是我能想到的唯一最佳实践

相关内容