想象一下这样的场景:我从本地机器登录到一个服务器(我们称之为“Wallace”),然后从那里登录ssh
到另一个服务器(我们称之为“Gromit”):
laptop ---ssh---> Wallace ---ssh---> Gromit
然后 Wallace 和 Gromit 之间的 ssh 会话挂起了,我想终止它。如果我输入~.
kill ssh,它会终止我的笔记本电脑和 Wallace 之间的 ssh 会话,因为 被~
该 ssh 会话拦截,并且 被.
视为终止会话的命令。我如何向 Wallace 和 Gromit 之间的 ssh 会话发送命令?我如何终止我的“内部” ssh?
答案1
添加另一个波浪符号(即输入~~.
)。每个连续的波浪符号都会被最外层的 ssh 会话(尚未吃掉波浪符号)吃掉,但如果下一个字符是另一个波浪符号,则会将其传递给下一个会话。
如果您从 gromit 1 ssh 到第三个主机(我们称之为 wensleydale),那么~~~.
将会放弃与 wensleydale 的会话并返回到 gromit 上的提示符。
1这是一台多么棒的服务器啊;我多少次听到开发人员评论“破解主机,gromit”?
答案2
你可以发出任意命令,并将最内层 shell 的输出捕获到变量中
export output=`echo some_cmd | ssh user@host | echo some_cmd2 | ssh user2@host2`