如何知道你是否处于嵌套 ssh 中?

如何知道你是否处于嵌套 ssh 中?

我很想知道是否有任何方法可以查明我是否处于嵌套 SSH 会话中以及其中有多少个会话?

例如,来自主机2 ssh user1@host1然后从主机1 ssh user1@host2最终在主机1,但实际上我可以退出去主机2

我怎么知道我处于这种情况(在嵌套的 ssh 会话中),当然除了 exit 命令之外?

答案1

这不是一个完美的解决方案,因为并非所有 SSH 客户端都支持此功能;并且这些可以进行不同的配置。仍然…

sshOpenSSH 支持以下内容:

转义字符

当请求伪终端时,ssh通过使用转义字符支持许多功能。

单个波浪线字符可以作为波浪线~~字符发送,也可以在波浪线后面加上除下述字符以外的字符来发送。转义字符必须始终跟在换行符之后才能被解释为特殊字符。可以使用EscapeChar配置指令在配置文件中或通过选项在命令行上更改转义字符-e

支持的转义(假设默认~)是:

[…]

~^Z
背景ssh

[…]

~C
打开命令行。 [...]如果在 中启用了!command该选项,则允许用户执行本地命令。使用该选项可以获得基本帮助。PermitLocalCommandssh_config(5)-h

[…]

假设所有链接的 SSH 客户端都支持此功能,并且假设已请求伪终端,您可以通过观察在实际波浪号出现在当前命令行中之前“消耗”了多少波浪号字符来判断连接数。请记住,波形符必须始终跟在换行符之后才能被解释为特殊。我的测试表明每个连接都会消耗一个转义字符。

例如,如果Enter您需要发送~四次才能~在屏幕上显示一个,则意味着存在三个链接连接。

Enter您可以通过发送、相应数量的~然后Ctrl+来将其中任何一个设置背景Z。这会将您置于相应的 shell 中,您可以在其中调查您来自哪里 ( env | grep ^SSH_)、您在哪里 ( uname -ahostname、...) 以及后台命令是什么 ( jobs)。运行fg以恢复连接。你能做什么取决于 shell 以及你如何运行相应的ssh,我不会详细说明。

如果有一个转义函数可以ssh打印有关连接的基本信息(类似于~#),那就太好了。似乎还没有这样的功能。

使用~CC此处表示大写 C,Shift+ C),!command您可以在不ssh向后台发送任何内容的情况下进行调查。注意默认值PermitLocalCommandno。 AFAIK 连接建立后无法更改它,所以请提前考虑。

相关内容