假设我在一台 PC 上运行了一个应用程序,它通过 SSH 向网络上的另一台 PC(两台运行 Linux 的机器)发送命令。
例如,每次在#1 上发生某些事情时,我都想在#2 上运行一个任务。在这个设置中,我必须在每个命令上创建 SSH 连接。
有没有什么简单的方法可以使用基本的 unix 工具来做到这一点,而无需编写自定义客户端/服务器应用程序?基本上我想要的只是通过 SSH 建立连接,然后一个接一个地发送命令。
nes*_*ono 21
使用 OpenSSH 的自动持久性
您还可以使用ControlMaster
OpenSSH的功能,它为第一次连接打开一个 unix 域套接字,并在所有后续调用中重用此连接。
要启用该功能,您可以-M
用作命令行开关或ControlMaster
在您的 中启用该选项~/.ssh/ssh_config
,例如:
ControlMaster auto
Run Code Online (Sandbox Code Playgroud)
此外,您应该ControlPath
在您的~/.ssh/ssh_config
:
Host *
ControlPath ~/.ssh/master-%r@%h:%p
Run Code Online (Sandbox Code Playgroud)
为了保持与主机的持久连接,例如,如果您想运行一个脚本,该脚本需要与主机建立许多 ssh 连接,而这些连接在脚本的整个生命周期内都不是持久的,您可以使用以下命令提前启动静默连接:
ssh -MNf remotehost
Run Code Online (Sandbox Code Playgroud)
Cheerio, nesono
Vit*_*aev 12
不确定它是否可以用于生产,但您可以执行以下操作:
在 #1 上创建文件
1> touch /tmp/commands
然后运行命令:
1> tail -f /tmp/commands | ssh username@x.x.x.x
这将打开文件 /tmp/commands 并开始将其内容发送到服务器 xxxx (#2) 并在那里逐行运行
现在,每次 #1 发生某些事情时,请执行以下操作:
1> echo "ls -l" >> /tmp/commands
或者
1> echo "reboot" >> /tmp/commands
您添加到文件 /tmp/commands 的任何内容都将发送到 #2 并执行。只要确保你没有运行任何交互式的东西,或者以某种方式处理它。
归档时间: |
|
查看次数: |
21469 次 |
最近记录: |