SSH会话卡住时该怎么办?


Answers:


195

~.在一行的开头键入(即波浪号,句点)。换句话说,按Enter,然后~,然后.。(在某些语言中,您可能需要按ShiftAlt输入~字符。)

一般而言,~当您在一行的开头键入该字符时,该字符是SSH会话中的转义字符。Enter然后键入~?以查看转义命令列表。最常见的是

  • ~. 终止连接
  • ~^Z(按~然后Ctrl+ Z)暂停的连接和本地输入一个命令(运行命令fg以返回到SSH会话)

如果要在行首加上波浪号,请按~两次。


7

退出ssh会话所需要做的只是exit在提示符下键入。

尝试输入Shift+ `+.


2
它不再接受用户输入,实际上已经停滞了。在Ubuntu上,有一种键盘组合可终止会话,您可以在这种情况下使用。一段时间后,会话将终止,broken-pipe但我宁愿不等待。
Kit Sunde 2012年

1
@Kit我固定了答案。对于那个很抱歉。我没有意识到您的意思是完全停止的SSH会话。
daviesgeek 2012年

我通常只是等待它超时。尽管我了解这些命令,但我始终忘记可以使用它们来加快收回外壳的过程。注意,也请@Gilles回答,您可能必须先按Enter / Return键,然后~. 才能在SSH联机帮助页中学习更多信息(略过一半),然后~?在活动/已连接的SSH会话中键入:打一次回车。
詹森·萨拉兹

7

如果您的会话已挂起,并且提示不再响应,则可以终止Terminal实例,并且与该实例相关联的所有子进程(与您的ssh会话是同一个子进程)都应随之删除。

如果您确实想彻底了解,尽管可以打开一个新的Terminal实例,请在进程列表中查找ssh会话,然后通过命令行将其杀死:

> ps -ef  |grep ssh
501  1332   142   0 20Dec11 ??         0:01.33 /usr/bin/ssh-agent -l
501 57172 57150   0  1:58pm ttys000    0:00.01 grep ssh
501 57139 57133   0  1:57pm ttys002    0:00.03 ssh -i/Users/ian/code/ec2-keys/id_rsa-gsg-keypair someuser@someinstance.amazonaws.com

> kill 57139

如果这样不起作用,请尝试:

> kill -9 57139

不要杀死这个ssh-agent过程。

或者,您可以打开“活动监视器”并在其中搜索会话,然后单击“杀死”按钮:

ssh会话的活动监视器过滤


+1,这就是我要做的。通常情况下,我让会话处于运行状态,然后连接意外中断或我睡在笔记本电脑上,这会导致ssh冻结。我打开一个新的控制台选项卡并杀死ssh进程的PID(或关闭ssh选项卡并打开一个新的PID)
Halfer'1

使用键盘快捷键是否可以在Mac上使用,而不会无聊地终止该过程?
拉斐尔·布加杰夫斯基

1
使用~.。往上看。
Snowcrash

0

〜。可以正常工作,尽管看起来好像完全卡住了,但它会停止ssh连接,您可以再次启动它,但是在键盘上,我必须先按Alt +〜,然后按空格键,然后按。

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.