欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

上传到sftp批处理模式 有大用

2

我需要将文件上传到 SFTP 服务器,作为自动化管道过程的一部分(因此无法交互)。我没有 ssh 访问权限,因此无法使用 scp 或 rsync。

我使用此答案中提出的解决方案取得了一些成功

sftp user@server <<EOF
put localPath remotePath
EOF

然而,我正在寻找更可靠的东西,因为如果失败我将没有任何迹象。例如,如果我想从 SFTP 服务器下载,我可以使用以下语法:

sftp user@server:remotePath localPath

有等效的上传单行吗?

2 个回答     正确答案

6

您可以使用 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

Marco回答让我创建了一个简单的脚本来包装该过程,但基本上我在脚本中所做的事情如下:

  1. 使用put {local} {remote}要上传的文件的命令创建批处理文件。

  2. 运行以下命令:

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

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

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

您必须登录才能回答此问题。

不是您要找的答案?浏览标记的其他问题.

来自  https://unix.stackexchange.com/questions/441254/upload-to-sftp-batch-mode


普通分类: