在终端中显示 ssh 连接堆栈

在终端中显示 ssh 连接堆栈

我有这个想法很久了,尝试了几种方法来实现,但都没有成功。尝试谷歌搜索了很多次,但总是找不到所需的东西。
怎么做:

$ ssh hostA

|--------------------------------|
|                                |
|                                |
|                                |
|                                |
|                                |
|                                |
|                                |
| root@hostA $ ssh hostB         |
|--------------------------------|

|--------------------------------|
|                                |
|                                |
|                                |
|                                |
|                                |
|                                |
| root@hostB $                   |
| root@hostA $                   |
|--------------------------------|

我想到的最接近的解决方案是使用 gnu 屏幕状态栏显示ssh from hostA to hostB(技巧是使用$SSH_...变量)。最好有一个所有连接的可视堆栈(而不仅仅是 2 个)。

答案1

~/.ssh/environment可以设置要传递到远程主机的环境变量。这需要PermitUserEnvironment在 中启用设置sshd_config

因此,您可以在.bashrc您喜欢的任何脚本中设置要传递的环境变量:

echo "HOSTPATH=$HOSTPATH-$USER@$HOSTNAME" >> ~/.ssh/environment

对于您的第一个跳跃,HOSTPATH将为空,因此~/.ssh/environment将包含HOSTNAME=-user@host1

当您登录到第二台主机时,HOSTNAME环境变量将传递过来,显示您来自哪里。当再次运行 bashrc 时,变量HOSTPATH将写入 .ssh/enviroment,当前主机将附加到第一台主机,为下一跳做好准备:

HOSTNAME=-user@host1-user@host2    

每个希望都将被HOSTPATH附加到当前主机并准备通过 ssh 环境传递到下一跳。

您可以根据自己的审美来调整这一点。如果您退出主机并跳转到另一个主机,它应该会自动从路径中删除您来自的主机,因为它将重新使用当前设置的设置.ssh/environment。它甚至可能处理循环,我将把它留给读者作为练习 :)

答案2

您是否尝试过/看过屏幕

这不完全是您想要的,但是您可以随时发出 screen -la 来获取您想要的列表。

相关内容