通过SSH在两个远程节点之间复制文件,而无需通过控制器

时间:2018-12-11 18:35:17

标签: ssh ansible

在Ansible中,您如何使一个远程节点连接到另一个远程节点?

我的目标是将文件从远程节点 a 复制到远程节点 b 并将其解压缩到目标上,但是其中一个文件非常大。

因此通常通过获取到控制器,将其从控制器复制到远程 b 来进行,然后进行非归档是不可接受的。理想情况下,我会从_remote_a_进行以下操作:

ssh remote_b cat filename | tar -x

这是为了加快速度。我可以使用shell模块来执行此操作,但是我的主要问题是,这样一来,我就失去了Ansible对SSH连接参数的处理。我必须手动传递SSH私钥(如果有),或者以非交互方式传递密码,或者传递给_remote_b_。没有多次复制,还有其他更好的方法吗?

在这种情况下,还必须通过SSH进行操作。

更新/说明:实际上,我知道如何从shell中执行此操作,并且可以在ansible中执行相同操作。我只是想知道是否有一种更好的方法可以像ansible一样。该文件确实很大。主要问题是当ansible在远程主机上执行命令时,我可以配置清单中的所有内容。但是在这种情况下,如果要在手动建立的ssh连接的参数上使用类似级别的可配置性/灵活性,我将不得不从头开始编写(甚至可能是一个ansible模块),或者类似的东西。例如,其他尝试仅使用ssh hostname command将需要无密码登录或默认私钥,在这种情况下,如果不手动添加,则无法修改清单中使用的私钥路径,并且在那里使用ssh连接插件实际上是两个可以用来设置私钥的变量。

1 个答案:

答案 0 :(得分:0)

看起来像是一个壳问题,而不是一个难题。 如果2个节点无法互相交谈,您可以执行

ssh remote_a cat file | ssh remote_b tar xf -

如果他们可以交谈(其中一个节点可以连接到另一个节点),则可以启动告诉一个远程节点连接到另一个节点,例如

ssh remote_b 'ssh remote_a cat file | tar xf -'

(也许引用是错误的,在ssh下启动ssh有时会造成混淆)。 在这后一种情况下,您可能需要插入一些密码或正确设置公共/私有ssh密钥。