使用 ssh 进行管道传输,无需为每个管道重新登录

使用 ssh 进行管道传输,无需为每个管道重新登录

我有一个 ssh 连接,我必须将一些本地文件和输出发送到 ssh 服务器。

我知道我可以使用以下命令来执行此操作

tar zcf - stuff | ssh user@server 'tar zxf -'

我想使用运算符按顺序进行设置&&。我已经有一个连接,我不想为每个管道重新登录,因为我一次只使用一个。

需要澄清的是,我不仅通过网络移动 tarball,而且还在管道打开时不时收集来自设备的输入。只是为了阻止人们说:“你为什么不使用这个程序通过互联网移动你的文件”或“你也可以使用 USB 驱动器传输这些文件”

答案1

您可以使用持久连接。在您的~/.ssh/config文件中添加如下行。

Host server.name.or.wildcard.goes.here
ControlPath /tmp/ssh.%r@%h:%p
ControlMaster auto
ControlPersist yes
ServerAliveInterval 300
ServerAliveCountMax 15

这将告诉 ssh 保持与基于用户/主机/端口组合的文件的连接打开/tmp。连接一次后,ssh 将重用现有连接。它最终会超时并自动断开连接。这样,在快速连续运行的几个命令中,您只会收到一次密码提示,最多可达到指定的时间。如果连接空闲时间过长,它将被关闭,您将需要再次输入密码。

保持连接打开还可以消除创建安全连接的初始延迟。这对于需要执行某些操作(例如复制文件,然后等待,然后复制另一个文件等)的脚本非常有用。 cdist使用此技术可以加快机器配置速度。

您还可以研究制作 ssh 密钥以完全避免密码。

相关内容