我有这个想法很久了,尝试了几种方法来实现,但都没有成功。尝试谷歌搜索了很多次,但总是找不到所需的东西。
怎么做:
$ 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 来获取您想要的列表。