在一个连接中执行 scp-then-ssh

在一个连接中执行 scp-then-ssh

无论在工作还是在家,我都会经常做以下事情:

$ scp "SomeScriptIJustCreatedOrModified.sh" some-server:
$ ssh some-server ./SomeScriptIJustCreatedOrModified.sh arguments

有时也会出现这种变化:

$ scp "SomeScriptIJustCreatedOrModified.sh" some-server:/tmp
$ ssh some-server -t sudo -u other_user /tmp/SomeScriptIJustCreatedOrModified.sh arguments

问题是,服务器通常位于不同的国家/地区,SSH 握手通常至少需要几秒钟 --- 而这种看似短暂的等待很快就会让人厌烦,并且会妨碍一长串服务器。不仅如此,我以前还因为可疑地快速建立连续 SSH 连接而受到指责。

如何实现这个呢?

答案1

ControlMaster打开单个 ssh 连接,并允许将来的ssh连接scp通过相同的连接,因此无需再次提供密码,或等待连接打开。

以下是如何设置的示例controlmaster通过重用连接来加速 SSH

编辑.ssh/config文件以包含以下行:

Host hostname                                                                                                          
    User username                                                                                                  
    ControlMaster auto
    ControlPath ~/.ssh/%r@%h:%p
    ControlPersist 600

其中hostnameusername被替换为适当的信息。

ControlPersist默认使用秒,但你可以使用10m例如 10 分钟。也可以使用yes,在这种情况下没有超时。

答案2

如果您在服务器上有 ssh 访问权限,则始终可以使用 ExpanDrive 等 sftp 客户端将远程主目录挂载到本地计算机上。然后,您只需在文本编辑器中本地编写脚本并将其保存到本地挂载的远程计算机上即可。

此时,它将位于服务器上,您所要做的就是通过 ssh 进入并运行它。只要您保持 sftp 和 ssh 连接打开,您就可以全天保存和运行任意数量的脚本,并且您只需连接一次 sftp 和一次 ssh。

请记住,使用此工作流程,每次保存时,您都会写入远程服务器,并且写入速度只会达到操作系统和网络限制允许的速度(即,它会比本地写入慢)。

相关内容