kal*_*npw 19 scripting ssh sftp file-copy
这是一个非常基本的问题,我对 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
Run Code Online (Sandbox Code Playgroud)
问题是,这个脚本将建立一个 sftp 连接,然后什么都不做。一旦我在连接中手动输入 exit ,它就会尝试执行 put 命令,但由于 sftp 会话已关闭,它只显示 put: command not found。
我怎样才能让它正常工作?
谢谢
Tho*_*key 26
您可以更改脚本以在此处的文档中传递命令,例如,
#!/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
Run Code Online (Sandbox Code Playgroud)
<<后跟名称 ( EOF)的标记告诉脚本传递以下几行,直到在该行的开头(单独)找到该名称。
小智 10
您可能更喜欢使用scp而不是sftp. scp行为很像普通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
Run Code Online (Sandbox Code Playgroud)
这会将您本地机器上的文件复制到远程机器上的目录中,而无需使用老式 ftp 风格的命令界面。
的ssh,scp和sftp服务通常可如果其中任何的; 同一个守护程序同时提供所有这些。原则上,服务器的管理员可以选择禁用其中任何一个,但实际上这种情况很少见。
您还可以使用-b选项sftp来指示包含sftp.
例如,您可以将所有命令放在 file 中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
Run Code Online (Sandbox Code Playgroud)
并运行sftp为:
sftp -oPort=23 -b sftp_commands.txt kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想使用文件,也可以通过 STDIN 传递命令。
来自man sftp:
-b 批处理文件
批处理模式从输入批处理文件而不是标准输入中读取一系列命令。由于它缺乏用户交互,因此应与非交互式身份验证结合使用。“-”的批处理文件可用于指示标准输入。如果以下任何命令失败,sftp 将中止:get、put、reget、rename、ln、rm、mkdir、chdir、ls、lchdir、chmod、chown、chgrp、lpwd、df、symlink 和 lmkdir。可以通过 pre? 逐个命令地抑制错误终止。使用“-”字符修复命令(例如,-rm /tmp/blah*)。
另一种选择是使用curl:
curl -u user -T file.tar sftp://example.com/home/user/
Run Code Online (Sandbox Code Playgroud)