我必须将一个文件从服务器 A 传输到 B,然后需要在服务器 B 触发一个脚本。服务器 B 是一个负载平衡服务器,它会将您重定向到我们不知道的服务器 B1 或 B2。
我已经做到了,如下所示。
sftp user@Server
put file
exit
然后执行下面的代码来触发目标脚本
ssh user@Server "script.sh"
但这里的问题正如我所说,它是一个负载平衡服务器,有时我将文件放在一台服务器上,而脚本在另一台服务器上获取触发器。如何克服这个问题?
我正在考虑下面的一些解决方案
ssh user@server "Command for sftp; sh script.sh"
(即)在同一个服务器调用中,如果我放置并触发它不会给我上述问题。如何在 ssh 连接中执行 sftp?否则还有其他建议吗?
最佳答案
如果您只是复制一个文件然后执行一个脚本,并且它不能作为两个单独的命令发生,您可以执行:
gzip -c srcfile | ssh user@remote 'gunzip -c >destfile; script.sh'
这个gzip
的src文件,通过ssh发送到远端,在那边gunzip
,然后执行script.sh
.
如果你想要多个文件,你可以使用 tar
而不是 gzip:
tar czf - <srcfiles> | ssh user@remote 'tar xzf -; script.sh'
如果你想从远程端获取结果并且它们是文件,你可以在脚本之后复制 tar...
tar czf - <srcfiles> | ssh user@remote 'tar xzf -; script.sh; tar czf - <remotedatafiles>' | tar xzf -
即创建一个从 ssh 返回到本地环境的新管道。这仅在 script.sh
不生成任何输出时有效。如果它生成输出,您必须将其重定向,例如重定向到/dev/null 以防止它弄乱 tar:
tar czf - <srcfiles> | ssh user@remote 'tar xzf -; script.sh >/dev/null; tar czf - <remotedatafiles>' | tar xzf -
关于linux - 如何在 ssh 命令行中进行文件传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31023353/