Linux 如何在ssh命令行内进行文件传输?
我必须将一个文件从服务器a传输到服务器B,然后需要在服务器B触发一个脚本。服务器B是一个负载平衡服务器,它将重定向到我们不知道的服务器B1或B2 我实现了以下目标Linux 如何在ssh命令行内进行文件传输?,linux,shell,ssh,sftp,aix,Linux,Shell,Ssh,Sftp,Aix,我必须将一个文件从服务器a传输到服务器B,然后需要在服务器B触发一个脚本。服务器B是一个负载平衡服务器,它将重定向到我们不知道的服务器B1或B2 我实现了以下目标 sftp user@Server put file exit 然后执行下面的代码来触发目标脚本 ssh user@Server "script.sh" 但这里的问题是,正如我所说的,它是一个负载平衡服务器,有时我将文件放在一个服务器上,而脚本在另一个服务器上获取触发器。如何克服这个问题 我正在考虑下面的一些解决方案 ssh use
sftp user@Server
put file
exit
然后执行下面的代码来触发目标脚本
ssh user@Server "script.sh"
但这里的问题是,正如我所说的,它是一个负载平衡服务器,有时我将文件放在一个服务器上,而脚本在另一个服务器上获取触发器。如何克服这个问题
我正在考虑下面的一些解决方案
ssh user@server "Command for sftp; sh script.sh"
(即)在同一个服务器调用中,如果我放置并触发,则不会出现上述问题。如何在ssh连接内执行sftp?否则还有其他建议吗 您可以先使用scp命令上载文件,然后通过ssh调用远程命令
$scp文件名user@machine:/path/to/file&&sshuser@machine“bash-s”
本例介绍了上载本地文件,但在服务器a上运行该文件没有问题。如果您只是复制一个文件,然后执行一个脚本,并且它不能作为两个单独的命令执行:
gzip -c srcfile | ssh user@remote 'gunzip -c >destfile; script.sh'
这个gzip
s src文件,通过ssh将其发送到远程端,gunzip
s将其发送到该端,然后执行script.sh
如果需要多个文件,可以使用tar
而不是gzip:
tar czf - <srcfiles> | ssh user@remote 'tar xzf -; script.sh'
您可以在服务器上创建一个fifo(命名管道),并启动一个试图从中读取的程序。程序会阻塞,不会占用任何CPU
从sftp尝试编写管道——确实会失败,但侦听程序将运行,并检查上传的文件
# ls -l /home/inp/alertme
prw------- 1 inp system 0 Mar 27 16:05 /home/inp/alertme
# date; cat /home/inp/alertme; date
Wed Jun 24 12:07:20 CEST 2015
<waiting for 'put'>
Wed Jun 24 12:08:19 CEST 2015
#ls-l/home/inp/alertme
prw-----1 inp系统0 Mar 27 16:05/home/inp/alertme
#日期;cat/home/inp/alertme;日期
2015年6月24日星期三12:07:20 CEST
2015年6月24日星期三12:08:19 CEST
使用tar gzip压缩、ssh默认压缩进行传输测试。将PV用于as管道仪表(apt获取并安装PV)
在一些网站上测试文件夹里有大约80k的小图片,文件夹的总大小约为1.9Gb
使用非标准ssh端口2204
1) tar-gzip,无ssh压缩
tar cpfz - site.com|pv -b -a -t|ssh -p 2204 -o cipher=none root@removeip "tar xfz - -C /destination/"
光伏电表从4Mb/秒开始,到最后下降到1.2MB/秒。PV显示大约1.3Gb的传输字节(文件夹的总大小为1.9GB)
2) tar-nozip、ssh压缩:
tar cpf - site.com|pv -b -a -t|ssh -p 2204 root@removeip "tar xf - -C /destination/"
pv电表从8-9Mb/秒开始,最后下降到1.8Mb/秒当我们第一次执行scp时,它是第一次尝试服务器,当我们第二次执行ssh时,它是另一个连接。所以它并不总是去同一台服务器。非常清楚。谢谢。如果我想传输一个目录中的所有文件,如何更改上述代码?gzip-r单独压缩所有文件,而不是作为一个单独的文件user@host'焦油xzf-;script.sh。如果要指定目标目录add
-C
例如tar xzf--C
谢谢,现在就可以了。另一个问题是在远程站点执行脚本后,我需要从那里提取一些数据。在同一个连接中可能吗?如果脚本不产生任何输出,那么您可以简单地执行:tar czf-| sshuser@remote'焦油xzf-;script.sh;焦油czf-“|焦油xzf-
。我已经用更多的细节更新了答案
tar cpfz - site.com|pv -b -a -t|ssh -p 2204 -o cipher=none root@removeip "tar xfz - -C /destination/"
tar cpf - site.com|pv -b -a -t|ssh -p 2204 root@removeip "tar xf - -C /destination/"