如果命令从本地运行(从 OS X 登录),SSH 将停止工作

如果命令从本地运行(从 OS X 登录),SSH 将停止工作

ssh 命令仅执行本地系统的命令。

例如:

ssh [email protected] df -h

这招奏效了,但之后 ssh 协议就挂了。挂了大约 10 分钟,然后又恢复正常。我收到的错误消息如下。

ssh: connect to host mydomain.com port 22: Operation timed out

答案1

问题是,在本地计算机上运行的 ssh-agent 挂起了,阻止您尝试建立另一个连接。我认为ssh-agent当您的 ssh 连接终止并且进程结束时应该退出,但由于某种原因,OS X 实现挂起了。出于安全原因,您的用户的其他实例无法使用此 ssh-agent 实例。

我认为,如果这种情况也发生在 Ubuntu 中,解决方案就是在完成 ssh 会话后,在启动另一个 ssh 会话之前,简单地终止 ssh-agent 进程。

如果ssh-agent挂起成为一个问题,您可以在会话结束后使用以下命令自动结束它:

~$ ssh username@hostname && kill $(pgrep ssh-agent)

[编辑]

如果您要连接的客户端只有一个使用 ssh 的用户,并且您正在从一台具有来自不同用户的多个并发 ssh 连接的计算机进行连接,则该命令适用。您将需要使用:

~$ ssh username@hostname && kill $(ps -U your_local_username | grep ssh-agent | grep -oP "^\d+")

相关内容