我必须将文件从服务器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?否则还有其他建议吗?
答案 0 :(得分:2)
如果您只是复制一个文件然后执行一个脚本,那么它就不能作为两个单独的命令发生:
gzip -c srcfile | ssh user@remote 'gunzip -c >destfile; script.sh'
这个gzip
的srcfile,通过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 -
答案 1 :(得分:0)
您可以先使用scp命令上传文件,然后通过ssh调用remote命令。
$ scp filename user@machine:/path/to/file && ssh user@machine 'bash -s' < script.sh
关于上传本地文件的示例,但在服务器A上运行它没有问题。
答案 2 :(得分:0)
您可以在服务器上创建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
答案 3 :(得分:0)
使用tar gzip压缩传输测试,ssh默认压缩。使用PV作为管道计(apt-get install pv) 在一些网站文件夹上测试大约80k的小图片,文件夹的总大小约为1.9Gb 使用非标准ssh-port 2204
1)tar gzip,没有ssh压缩
.button:focused,
.toggle-button:focused,
.radio-button:focused > .radio,
.check-box:focused > .box,
.menu-button:focused,
.choice-box:focused,
.color-picker.split-button:focused > .color-picker-label,
.combo-box-base:focused,
.slider:focused .thumb {
-fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color;
-fx-background-insets: 0 0 -1 0, 0, 1, 2;
-fx-background-radius: 3px, 3px, 2px, 1px;
}
.scroll-pane:focused,
.split-pane:focused,
.list-view:focused,
.tree-view:focused,
.table-view:focused,
.tree-table-view:focused,
.html-editor:focused {
-fx-background-color: -fx-box-border, -fx-control-inner-background;
-fx-background-insets: 0, 1;
-fx-padding: 1;
}
.radio-button > .radio, .radio-button:focused > .radio {
-fx-background-radius: 1.0em; /* large value to make sure this remains circular */
-fx-padding: 0.333333em; /* 4 -- padding from outside edge to the inner black dot */
}
.split-menu-button:focused {
-fx-background-color: -fx-shadow-highlight-color, -fx-outer-border;
-fx-background-insets: 0 0 -1 0, 0;
-fx-background-radius: 3, 3;
}
.split-menu-button:focused > .label {
-fx-text-fill: -fx-text-base-color;
-fx-background-color: -fx-inner-border, -fx-body-color;
-fx-background-insets: 1 0 1 1, 2 1 2 2;
-fx-background-radius: 2 0 0 2, 1 0 0 1;
-fx-padding: 0.333333em 0.667em 0.333333em 0.667em; /* 4 8 4 8 */
}
.split-menu-button:focused > .arrow-button {
-fx-background-color: -fx-inner-border, -fx-body-color;
-fx-background-insets: 1, 2;
-fx-background-radius: 0 2 2 0, 0 1 1 0;
-fx-padding: 0.5em 0.667em 0.5em 0.667em; /* 6 8 6 8 */
}
.scroll-bar:focused {
-fx-background-color: derive(-fx-box-border,30%), linear-gradient(to bottom, derive(-fx-base,-3%), derive(-fx-base,5%) 50%, derive(-fx-base,-3%));
-fx-background-insets: 0, 1 0 1 0;
}
.scroll-bar:vertical:focused {
-fx-background-color: derive(-fx-box-border,30%), linear-gradient(to right, derive(-fx-base,-3%), derive(-fx-base,5%) 50%, derive(-fx-base,-3%));
-fx-background-insets: 0, 0 1 0 1;
}
.text-input:focused {
-fx-highlight-fill: -fx-accent;
-fx-highlight-text-fill: white;
-fx-background-color: linear-gradient(to bottom, derive(-fx-text-box-border, -10%), -fx-text-box-border),
linear-gradient(from 0px 0px to 0px 5px, derive(-fx-control-inner-background, -9%), -fx-control-inner-background);
-fx-background-insets: 0, 1;
-fx-background-radius: 3, 2;
-fx-prompt-text-fill: transparent;
}
.text-area:focused .content {
-fx-background-color:
linear-gradient(from 0px 0px to 0px 4px, derive(-fx-control-inner-background, -8%), -fx-control-inner-background);
-fx-background-radius: 2;
}
.titled-pane:focused > .title > .arrow-button > .arrow {
-fx-background-color: -fx-mark-highlight-color, -fx-mark-color;
-fx-background-insets: 1 0 -1 0, 0;
}
.color-picker.split-button:focused > .arrow-button {
-fx-background-color: -fx-outer-border, -fx-inner-border, -fx-body-color;
-fx-background-insets: 1 1 1 0, 1, 2;
-fx-background-radius: 0 3 3 0, 0 2 2 0, 0 1 1 0;
}
pv meter从4Mb /秒开始,最后降级到1.2MB /秒。 PV显示大约1.3Gb传输字节(文件夹总大小为1.9GB)
2)tar nozip,ssh压缩:
tar cpfz - site.com|pv -b -a -t|ssh -p 2204 -o cipher=none root@removeip "tar xfz - -C /destination/"
pv meter从8-9Mb /秒开始,最终降级到1.8Mb /秒