我正在创建一个小脚本来更新一些远程服务器(2+)
我正在为每个服务器进行多次连接;有没有办法可以重用SSH连接,所以我不必一次打开太多?
答案 0 :(得分:26)
如果您使用-M
打开第一个连接:
ssh -M $REMOTEHOST
后来与$REMOTEHOST
的连接将“捎带”主设备ssh
建立的连接。最值得注意的是,不需要进一步的身份验证。有关详细信息,请参阅“ControlMaster”下的man ssh_config
。使用-S
指定共享套接字的路径;我不确定默认值是什么,因为我使用配置文件来配置连接共享。
在我的.ssh/config
文件中,我有以下几行:
host *
ControlMaster auto
ControlPath ~/.ssh/ssh_mux_%h_%p_%r
这样,我就不必记得使用-M
或-S
; ssh
确定主机/端口/用户名组合是否已存在可共享连接,并在可能的情况下使用该连接。
此选项自2004年起在OpenSSH中提供。
答案 1 :(得分:12)
我更喜欢Puppet Labs https://puppetlabs.com/blog/speed-up-ssh-by-reusing-connections
中描述的方法将这些行添加到ps1.println();
并运行~/.ssh/config
mkdir ~/.ssh/sockets
阅读完整的博客文章,了解更多有用的信息,了解这些内容以及ssh在使用时的特性。我强烈建议您阅读博客,否则您可能会发现某些内容无法按预期发挥作用。
答案 2 :(得分:10)
或者,你可以这样做:
$ssh_conn="ssh -t -o ControlPath=~/.ssh/master-$$ -o ControlMaster=auto -o ControlPersist=60"
$ssh_conn user@server
ControlPath=~/.ssh/master-$$
为ssh设置控制路径
连接限制连接重用到当前shell(通过
$$
PID)ControlMaster=auto
允许连接会话
使用ControlPath
ControlPesist=60
设置金额
由于不活动,连接应保持打开的时间