目前我调用以下内容:
$ ssh [email protected] my_cmd
这很慢并且不容易安全地实现自动化。我想建立一次 ssh 连接,并有一些脚本将我的命令转发到 host.com 并打印输出。
那可能吗 ?
将我的机器添加到authorized_keys对我来说不是一个选择,并且它不能解决缓慢问题。
答案1
该功能称为ControlMaster
在一个现有通道上进行复用。它导致 ssh 执行所有密钥交换并仅登录一次;因此,后面的命令将执行得更快。您可以使用以下三行来激活它.ssh/config
:
Host host.com
ControlMaster auto
ControlPath ~/.ssh/master-%C
# for openssh < 6.7 you need to use this one:
# ControlPath ~/.ssh/master-%r@%h-%p
ControlPersist 5m
您可以根据您的需要进行调整;另一种选择是,您可以打开一个主连接,该连接在执行其他命令期间保持打开状态;那么你就不需要了ControlPersist
。
此功能有很多调整的可能性,但请确保将套接字存储ControlPath
在安全的地方,其他用户无法读取,否则可能会被滥用。
更多信息可以在ssh_config(5)
手册页中找到。
答案2
如果您可以控制机器并在其上自动执行任务,那么为什么不能将密钥添加到authorized_keys 中呢?
ssh-copy-id -i ~/.ssh/foo [email protected]
这样您就不必每次连接时都输入密码。
control master
如果最大的问题是连接需要很长时间才能连接,您可以通过添加到 ssh 配置来重用单个连接。让该连接保持运行,任何后续连接都将几乎是瞬时的。
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
https://puppetlabs.com/blog/speed-up-ssh-by-reusing-connections
从长远来看,如果您要自动化任务,那么使用为您建立连接的自动化框架可能会更好,例如: