我正在大量使用重用共享连接,我在工作日开始时打开该连接到远程框。
我的.ssh/config
看起来有点像这样:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Host remote
HostName login.remote.com
User username
ForwardX11 yes
ServerAliveInterval 300
Run Code Online (Sandbox Code Playgroud)
除了一个例外,这很有效。建立第一个连接(主连接)后,这工作正常:我可以使用带有主连接的终端在远程执行操作,并且我可以通过调用在新终端中重用主连接ssh remote
,这会在不需要的情况下打开一个新连接重新输入我的凭据。
但是,如果过了一段时间(在几十分钟到几小时之间,我不太确定)并且我想打开一个新连接,这将失败并且主连接关闭并显示消息(在主终端上):
Connection to login.remote.com closed by remote host.
Connection to login.remote.com closed.
Run Code Online (Sandbox Code Playgroud)
和(在我用来打开新连接的终端上)
Shared connection to login.remote.com closed.
Run Code Online (Sandbox Code Playgroud)
尽管它在几秒钟前工作得很好(我可以使用运行主连接的终端在遥控器上执行命令。
编辑::这是ssh -vvv remote
无法正确打开的新打开会话的输出:
OpenSSH_6.1p1 Debian-4、OpenSSL 1.0.1c 2012 年 5 月 10 日
debug1:读取配置数据 /home/$USERNAME/.ssh/config
debug1:/home/$USERNAME/.ssh/config 第 27 行:为远程
debug1应用选项:读取配置数据 /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying …
我正在研究一个具有数百个节点的计算集群。当通过 ssh 进入集群时,负载平衡方案会选择一个空闲节点来登录。因此,在随后调用 ssh 时重新登录到以前的机器的可能性很小。
但是,我想tmux
在遥控器上使用来设置在不同登录之间持续存在的会话。
我正在寻找可用于实现所需行为的不同选项。我想出了以下选项,但是,这并不是一个真正的“好”解决方案:
选择一个节点并坚持下去。
即在node-XXXX
负载平衡器登录机器后打开一个新的 ssh 连接node-0042
并在tmux
那里运行。
使用ssh
's ProxyCommand
this 甚至可以以无缝方式实现,即用户键入ssh node-0042
打开集群登录的连接并使用该连接作为连接的代理node-0042
。
这有一个明显的缺点,即用户无法从负载平衡机制中获得任何好处。
您对如何处理这种情况有什么建议吗?任何解决它的不同方法的想法(是否可以将正在运行的tmux
服务器“移动”到另一台机器[这是当前机器的副本]?)。