我使用 autossh 保持与远程 mysql 服务器的连接开放。
autossh -p 22 -M 0 -L 33061:localhost:3306 [email protected] -f -C -N
基本上,每当我输入:
mysql -h localhost -P33061
我在远程 mysql 服务器上访问 mysql 服务器。
现在,我想打开另一个到另一台服务器的连接,并想在远程服务器上执行某些命令。我该怎么做?
我发现的唯一解决方法是始终
connect to remote server
execute command on remote server
disconnect from remote server.
我通过类似的命令执行此操作:
ssh [email protected] -p 22 "ls"
这种方法的问题在于它总是先连接,然后执行命令,然后断开连接。这需要时间。我想保持连接始终打开并从远程计算机的 shell 命令执行。
所以,我应该自动 ssh 到远程,自动 ssh 将保持连接打开,并且我需要正确的方法ls
在远程服务器上执行命令(在本地返回结果)。
实现这一目标的最佳方法是什么?
答案1
您需要的是 SSH 多路复用功能,即重复使用单个现有 TCP 连接进行多个 SSH 会话。以下是如何在您的 中启用此功能的示例ssh_config
:
Host myserver
User root
HostName 10.0.0.2
ControlMaster auto
ControlPath ~/.ssh/%r@%h:%p
ControlPersist 10m
ControlMaster
激活该主机的多路复用。
ControlPath
设置“控制套接字”的路径(可以是任何你想要的位置)
ControlPersist
将在后台保持连接打开指定的一段时间(在退出最后一个连接之后)。
当您建立与 的初始(主)连接myserver
(例如通过 )时ssh myserver "ls"
,将在上面设置指定的位置创建一个控制套接字ControlPath
。在本例中它将是,其中~/.ssh/[email protected]:22
根对应于%r
令牌(远程用户名),10.0.0.2到%h
令牌(目标主机名),以及22到%p
该条目中的令牌(目标端口)。只要主连接在后台保持打开状态,此套接字文件就会存在。
现在,每次您后续尝试连接myserver
(例如另一个)时ssh myserver "ls"
,主连接将被重用。
请参阅ssh_config(5)
有关如何调整这些设置以实现您的要求的更多详细信息(例如,如果您想要无限期地保持连接打开等)。