【问题标题】:keep multiple SSH connections alive for future commands为将来的命令保持多个 SSH 连接处于活动状态
【发布时间】:2014-06-13 17:43:16
【问题描述】:

我有一个脚本可以将大量文件从本地机器传输到远程机器上的 HDFS。在脚本中,它使用ssh,如下所示:

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

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

另外,我使用多个进程进行上传。是否可以保持多个不同的连接处于活动状态?例如,如果我使用 4 个进程,是否可以同时保持 4 个不同的连接处于活动状态?

谢谢。

【问题讨论】:

  • scprsync 是你的朋友!

标签: linux hadoop ssh


【解决方案1】:

这可能不适用于 Hadoop,我不知道:考虑编写 sftp 会话脚本。 mput file* 太棒了。

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

ServerAliveInterval 300
ServerAliveCountMax 60

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢。我考虑使用Rsync,如果我想传输到远程本地文件系统,这真的很棒。但后来我又回到ssh,因为它无法执行命令(在我的情况下,将文件放入HDFS)。或者我遗漏了什么,如果我错了,请纠正我。
    【解决方案3】:

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

        Host *
        ServerAliveInterval <seconds>
    

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

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 2019-12-28
      • 2020-04-12
      • 1970-01-01
      • 2012-01-03
      • 2021-09-13
      • 2013-08-27
      • 2019-09-01
      • 2018-09-04
      相关资源
      最近更新 更多