执行远程命令

执行远程命令

我使用 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)有关如何调整这些设置以实现您的要求的更多详细信息(例如,如果您想要无限期地保持连接打开等)。

相关内容