通过脚本在sftp连接中执行命令


13

这是一个非常基本的问题,对于bash来说我还是很陌生,无法弄清楚该怎么做。不幸的是,谷歌搜索没有带我到任何地方。

我的目标是使用sftp连接到服务器,上传文件,然后断开连接。

我有以下脚本:

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins

#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar

exit

问题是,此脚本将建立sftp连接,然后什么也不做。一旦我在连接中手动键入exit,它就会尝试执行put命令,但是由于sftp会话已关闭,它只会显示put:命令未找到。

我如何才能使其正常工作?

谢谢


Answers:


15

您可以更改脚本以在此处文档中传递命令,例如,

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar   
exit
EOF

<<标记依次是姓名(EOF)告诉脚本(本身),直到名在该行的开始发现通过以下行。


很棒,确实满足了我的需求。我将不得不阅读这里的文档。感谢您的快速答复,我们将在8分钟内接受。
kalenpw

没问题(我查找了一个重复项,但只发现一个关闭为“不清楚”)。
Thomas Dickey

您确定服务器不会阻塞shell脚本的注释吗?
2016年

同样,这种方法取决于外壳的类型。
2016年

@alk脚本可在不加评论的情况下工作
kalenpw

5

您可能更喜欢使用scp而不是sftpscp行为很像普通cp命令,但是文件可以是远程的:

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins

这会将本地计算机上的文件复制到远程计算机上的目录中,而不必使用老式的ftp样式的命令界面。

sshscpsftp服务通常可如果其中任何的; 同一守护程序会同时提供所有这些守护程序。原则上,服务器的管理员可以选择禁用其中的任何一个,但是实际上,这种情况很少见。


事先不了解scp看起来非常有用。而且您说的对scp,已经在我的机器上可用
kalenpw

4

您还可以使用-b选项sftp来指示包含的命令的文件sftp

例如,您可以将所有命令放在文件中sftp_commands.txt

cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit

并运行sftp为:

sftp -oPort=23 -b sftp_commands.txt kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins 

或者,如果您不想使用文件,也可以通过STDIN传递命令。

来自man sftp

-b批处理文件

批处理模式从输入批处理文件而不是stdin读取一系列命令。由于缺少用户交互,因此应与非交互身份验证结合使用。批处理文件“-”可用于指示标准输入。如果以下任何命令失败,sftp将中止:get,put,reget,rename,ln,rm,mkdir,chdir,ls,lchdir,chmod,chown,chgrp,lpwd,df,symlink和lmkdir。通过在命令前加上一个'-'字符(例如,-rm / tmp / blah *),可以在命令的基础上抑制错误终止。


2

另一种选择是使用curl

curl -u user -T file.tar sftp://example.com/home/user/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.