作为自动化管道过程的一部分,我需要将文件上传到 SFTP 服务器(因此不能交互)。我没有 ssh 访问权限,所以我不能使用 scp 或 rsync。
使用此答案中提出的解决方案,我取得了一些成功:
sftp user@server <<EOF
put localPath remotePath
EOF
但是,我正在寻找更可靠的东西,因为如果失败,我将没有任何迹象。例如,如果我想从 SFTP 服务器下载,我可以使用以下语法:
sftp user@server:remotePath localPath
是否有等效的单线上传?
您可以使用 sftp 的“批处理模式”。从手册:
这意味着,您使用命令创建一个临时文件并使用“sftp -b tempfile user@server”执行文件中的命令
还有其他用于此类事情的工具,例如 lftp
Marco的回答让我创建了一个简单的脚本来包装这个过程,但基本上我在脚本中所做的如下:
put {local} {remote}
使用要上传的文件的命令创建批处理文件。sftp -b {batch_file} -i {identity_file} -o StrictHostKeyChecking=no {username}@{hostname}
该命令无需用户进行任何输入即可工作,并且将具有可以检查成功或失败的错误代码。
我只是想以更完整的形式在此处包含此答案,以供将来的访问者使用。