Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在ssh命令行内进行文件传输?_Linux_Shell_Ssh_Sftp_Aix - Fatal编程技术网

Linux 如何在ssh命令行内进行文件传输?

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

我必须将一个文件从服务器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?否则还有其他建议吗

您可以先使用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/"