linux - 如何在 ssh 命令行中进行文件传输?

标签 linux shell ssh sftp aix

我必须将一个文件从服务器 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/

相关文章:

python - [Python][evdev] 获取鼠标点击后光标位置

shell - 在 fish shell 中压缩 for 循环(循环多个列表)

linux - 我想将 Bash 脚本的所有命令行参数存储到单个变量中

mysql - 在没有任何第三方库的情况下从 MySQL 触发 shell 脚本

python - 当父进程死亡时,如何杀死使用 subprocess.check_output() 创建的 python 子进程?

linux - CentOS 6.4 logrotate 显示错误权限被拒绝

java - 在 linux 机器上遇到编码问题,而不是 Windows

mysql - 如何在 BIRT 中添加数据源,该数据源是只能使用 TCP/IP 通过 SSH 访问的 mysql 数据库?

python - 无法关闭使用 Popen 打开的 SSH 连接

php - 为什么我的php -v版本与phpinfo()不同?