如何将命令发送到“内部” ssh会话?


32

设想一个场景,在该场景中,我从本地计算机登录到服务器(我们称为“ Wallace”),然后从那里登录ssh另一台服务器(我们称为“ Gromit”):

laptop ---ssh---> Wallace ---ssh---> Gromit

然后从Wallace到Gromit的ssh会话挂起,我想终止它。如果我输入~.杀死ssh的权限,它将杀死从我的笔记本电脑到Wallace的ssh会话,因为~ssh会话拦截了该,并将.用作杀死该会话的命令。如何向Wallace和Gromit之间的ssh会话发送命令?如何杀死“内部” ssh?


仅供参考:某些键盘布局可能需要按两次“〜”键才能打印一个“〜”字符。我经常使用屏幕,因此当ssh连接丢失时,我可以简单地启动另一个shell来终止该会话。
数学

Answers:


42

添加另一个波浪号(即键入~~.)。每一个连续的波浪号都被最外面的ssh会话所吞噬,而该会话尚未被吃掉,但是如果下一个字符是另一个波浪号,则将其传递到下一个会话中。

如果您从gromit 1切换到第三台主机(我们称其为wensleydale),则将~~~.会话放到wensleydale并返回到有关gromit的提示。

1这是多么出色的服务器;我有多少次听到开发人员的话“开裂主机,抱怨”?


2
相关:Telnet歌曲
voretaq7

1
哦,那太奇妙了;我不敢相信我以前从未遇到过。
MadHatter支持Monica 2012年

如果能以某种方式获得关于您的堆栈有多远的视觉反馈,以防万一您有laptop --> Wallace --> Gromit --> Shaun --> Timmy这样的疯狂想法,那就太好了……
iconoclast 2012年

-2

您可以发出任意命令,并将最内层shell的输出捕获到变量中

export output=`echo some_cmd | ssh user@host |  echo some_cmd2 | ssh user2@host2`

1
这很有趣,但是我不确定它与问题之间的关系。你可以解释吗?
iconoclast
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.