linux—为将来的命令保持多个ssh连接处于活动状态

o4hqfura  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(401)

我有一个脚本将大量文件从本地计算机传输到远程计算机上的hdfs。在它使用的脚本中 ssh 这样地:

cat localfile | ssh user@remote 'hadoop fs -put - path-to-target-file'

因为我有很多文件要传输,在每次传输之前,我需要检查是否已经存在同名的目标文件,因此对于每次传输,我必须使用两个ssh命令(check existence,put)。因为建立ssh连接非常耗时,所以我想知道是否有方法保持ssh连接处于活动状态,以便在第一次成功连接之后,其他ssh命令不会尝试建立新的连接,而是直接使用旧的连接。
另外,我使用了多个进程来进行上传。有可能保持多个不同的连接吗?例如,如果我使用4个进程,是否可以同时保持4个不同的连接处于活动状态?
谢谢。

s5a0g9ez

s5a0g9ez1#

您可以向服务器发送操作,以防止由于不活动而导致连接丢失。这可以通过向~/.ssh/config添加以下行来完成

Host *
    ServerAliveInterval <seconds>

其中'seconds'是发送禁止操作代码前的秒数。

bn31dyow

bn31dyow2#

这可能不适用于hadoop,我不知道:考虑编写sftp会话脚本。 mput file* 太棒了。
相关:为了保持当前会话的活力,这在您的 ~/.ssh/config :

ServerAliveInterval 300
ServerAliveCountMax 60
zf2sa74q

zf2sa74q3#

这是一个错误的方法开始。首先,如果ssh被传递了一个在远程服务器上执行的命令,比如 ssh user@host "command" ,它将在命令执行后退出。
你应该考虑使用 sftp , scp 或者 rsync . 后者将满足您检查远程版本和控制目标是否以及何时被各种条件覆盖的需要,还可以在一个连接中执行许多文件操作。查看rsync网站。

相关问题