上传到sftp批处理模式

上传到sftp批处理模式

我需要将文件上传到 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

答案2

回答经过马可引导我创建一个简单的脚本来包装该过程,但本质上我在脚本中所做的事情如下:

  1. put {local} {remote}使用要上传的文件的命令创建批处理文件。
  2. 运行以下命令:

sftp -b {batch_file} -i {identity_file} -o StrictHostKeyChecking=no {username}@{hostname}

该命令无需用户任何输入即可运行,并且将有一个错误代码,可以检查是否成功。

我只是想以更完整的形式将这个答案包含在此处,以供未来的访问者使用。

相关内容