为将来的命令保持多个SSH连接活动



我有一个脚本,用于将大量文件从本地机器传输到远程机器上的HDFS。在脚本中,它像这样使用ssh:

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

由于我有很多文件要传输,并且在每次传输之前,我需要检查是否已经存在同名的目标文件,因此对于每次传输,我必须使用两个ssh命令(检查存在,放置)。由于建立SSH连接非常耗时,我想知道是否有方法使SSH连接保持存活,以便在第一次成功连接后,其他SSH命令不尝试建立新连接,而直接使用旧连接。

另外,我使用了多个进程来完成上传。有可能保持多个不同的连接吗?例如,如果我使用4个进程,是否有可能同时保持4个不同的连接?

谢谢。

这可能不适用于Hadoop,我不知道:考虑编写一个sftp会话。mput file*很棒。

相关:为了保持当前会话的活力,这在您的~/.ssh/config中很方便:

ServerAliveInterval 300
ServerAliveCountMax 60

这一开始就是一个错误的方法。首先,如果向SSH传递一个命令在远程服务器(如ssh user@host "command")上执行,它将在命令执行后退出。

您应该考虑使用sftpscprsync。后者将满足您检查远程版本和控制目标是否以及何时被各种条件覆盖的需求,还可以在一个连接中执行许多文件操作。查看Rsync网站

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

中添加以下行来完成
    Host *
    ServerAliveInterval <seconds>

其中'seconds'为发送无操作码前的秒数

最新更新