我需要将文件上传到 SFTP 服务器,作为自动化管道流程的一部分(因此不能具有互动性)。我没有 ssh 访问权限,所以我不能使用 scp 或 rsync。
我使用以下方法取得了一些成功这个答案中提出的解决方案:
sftp user@server <<EOF
put localPath remotePath
EOF
然而,我正在寻找更可靠的东西,因为如果失败我将没有任何迹象。例如,如果我想从 SFTP 服务器下载,我可以使用以下语法:
sftp user@server:remotePath localPath
有等效的上传单行吗?
答案1
您可以使用 sftp 的“批处理模式”。来自手册:
> -b batchfile
> Batch mode reads a series of commands from an input batchfile instead of stdin. Since it lacks user interaction it
> should be used in conjunction with non-interactive authentication. A batchfile of ‘-’ may be used to indicate
> standard input. sftp will abort if any of the following commands fail: get, put, reget, reput, rename, ln, rm,
> mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir. Termination on error can be sup‐
> pressed on a command by command basis by prefixing the command with a ‘-’ character (for example, -rm /tmp/blah*).
这意味着,您使用命令创建一个临时文件,并使用“sftp -b tempfile user@server”执行文件中的命令
还有其他工具可以完成此类操作,例如 lftp