通过一个命令退出所有SSH连接并关闭PuTTY


18

有没有办法退出所有SSH连接并“一次性” 关闭PuTTY?我在Windows 7中工作,并使用PuTTY SSH到各种Linux主机。

我发现自己工作的方式的一个示例:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
banjer@host1:~> exit
Putty closes.

从上面看,有什么方法可以一口气从host8到关闭PuTTY?有时我发现自己多达5或10个主机。我知道我可以单击X关闭PuTTY窗口,但是我想确保通过使用exit命令可以正确关闭我的SSH连接。我也意识到我在询问有关如何增加懒惰的技巧。我将其写为“如何提高效率”。


6
不是直接问您要问的问题,而是只需按ctrl+d几次就可以了吗?
Ulrich Dangel 2012年

@UlrichDangel我以前从未使用过它,但是它还是一种快速退出连接的快速方法。
Banjer 2012年

2
您是否真的将ssh会话嵌套5到10个级别?您是否意识到正在创建一个复杂的隧道,该隧道通过所有这些主机反弹ssh会话中的所有数据包?您是否可以通过不嵌套ssh会话来解决问题?
jw013

@ jw013不,我没有意识到这一点,但是很有意义。坦白地说,5-10的水平是一个夸张,但我试图说明我的问题“如何一口气从腻子中干净地退出”。
Banjer 2012年

Answers:


29

尝试使用ssh连接终止转义序列。

ssh会话中,输入~.(波浪号)。键入字符时看不到字符,但会话将立即终止。

$ ~.
$ Connection to me.myhost.com closed.  

man 1 ssh

The supported escapes (assuming the default ‘~’) are:
 ~.      Disconnect.
 ~^Z     Background ssh.
 ~#      List forwarded connections.
 ~&      Background ssh at logout when waiting for forwarded 
         connection / X11 sessions to terminate.
 ~?      Display a list of escape characters.
 ~B      Send a BREAK to the remote system (only useful for SSH protocol
         version 2 and if the peer supports it).
 ~C      Open command line.  Currently this allows the addition of port 
         forwardings using the -L, -R and -D options (see above). It also
         allows the cancellation of existing remote port-forwardings using 
         -KR[bind_address:]port.  !command allows the user to execute a 
         local command if the PermitLocalCommand option is enabled in
         ssh_config(5).  Basic help is available, using the -h option.
 ~R      Request rekeying of the connection (only useful for SSH protocol 
         version 2 and if the peer supports it).

太酷了!有什么方法可以放入~.别名或函数?只是为了给它起一个容易记住的名字exitall。现在我要的太多了:)。我尝试了一些东西,~/.bashrc但是得到了-bash: ~.: command not found。我想bash将其视为字符串,而不是直接来自键盘的转义序列。
Banjer 2012年

我也喜欢该ctrl+d解决方案,但这可以更直接地回答我的问题。谢谢大家
Banjer 2012年

3
@Banjer bash从来没有看到过~.,它是由ssh自己处理的。
吉尔斯(Gillles)“所以别再作恶了”

@Gilles gotcha,很有道理。
Banjer 2012年

并且不能保证PuTTY也可以做到这一点。CLI ssh客户端需要此技术,因为它是CLI。PuTTY是一个GUI应用程序,在GUI上有很多用户友好的方法可以做到这一点。
Alexios 2012年

11

只需按CtrlD,它将退出登录并按住ctrl,然后按“ d”直到窗口消失。


1
可悲的是,这并不普遍。运行编辑器或其他全屏工具的任何会话都可能会忽略EOT。甚至bash会在命令行中间忽略它。自己尝试:输入一个字母并尝试Ctrl-D
Alexios 2012年

Ctrl + D代表什么,我是说它安全存在还是只是杀死了进程?
AMB 2015年

它安全地退出。这是一个shell快捷方式,与键入“ exit”并按Enter相同。
2015年

实际上,我的(windows git bash&ubuntu bash)发出一个logout
velis

是的,我相信exit还会调用注销,因为ssh连接往往不是登录会话。


2

另一种方法是让functionssh

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

不幸的是,在您完成远程系统上的工作之后,它还将始终关闭连接并从控制台注销。

请注意,您需要在所有服务器上都使用此功能,否则此黑客将无法使用。顺便说一句,您始终可以将函数放入〜/ .bashrc或〜/ .whatever_shell_you_use_rc中。

与uther的方式相比,它看起来有点脏。


function不是POSIX,只需删除关键字即可,您需要$@正确引用,否则分词(错误)后将传递您的参数。
克里斯·唐纳

2

或者execssh当跳转到另一台主机时,您可以使用替换您的shell进程:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.

5层深不是很漂亮,因为流量将通过所有其他服务器。因此,我不建议您仅杀死PuTTY或ssh(〜。),因为(取决于您的操作)这可能导致服务器上的孤立进程。

最好尝试并减少“懒惰”。右键单击腻子标题栏,可以快速打开新会话。如果您有一台“默认”服务器并接受其中的1个跳转,则“重复会话”功能将非常有用。特别是在使用pubkey身份验证时。


2

如果您不介意编写一些脚本,则可以执行此操作。

脚本:myssh.sh

#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
 exit 5
fi

通过dot命令调用:

$ . myssh user@server.com

如果要退出一个级别:

$ exit

如果要全部退出:

$ exit 5

当然,您应该将其复制到ssh可能使用的每台计算机。此外,仅定义一个称为ssh的shell函数会不会更容易?这将避免在前述期限等
etherfish

-1

在腻子终端窗口中输入注销可以为我完成此操作:

richard@forevermore:~ > logout

关闭ssh连接并退出Putty应用程序。


我相信您没有正确阅读问题。OP执行ssh host1,然后从host1执行ssh host8。那时,a logout会执行与exit他们已经知道的命令相同的操作-退出host8并放回host1
G-Man说“恢复莫妮卡”

好吧,我知道了,我不好。
理查德
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.