【问题标题】:How to catch/write - success/failure logs for sFTP - PUT command如何捕获/写入 - sFTP 的成功/失败日志 - PUT 命令
【发布时间】:2018-07-12 11:19:33
【问题描述】:

在我的 shell 脚本中,sFTP put 过程完成后。我需要检查 PUT 过程是成功完成还是失败。

【问题讨论】:

  • 显示一些代码。有不止一个 sftp 客户端,现在我们甚至不知道您要问的是哪一个。 (就个人而言,顺便说一句,我是lftp 的忠实粉丝,这是(1)支持更多的协议,而不仅仅是 sftp——还支持常规 ftp、http、标准 ssh 和许多其他协议;并且(2)是设计的考虑到脚本)。
  • (另外,您使用的参数非常重要——OpenSSH 的sftp 的行为与通过heredoc 或expect 脚本传递给标准输入的命令列表与-b 的行为完全不同批处理文件选项)。
  • spawn sftp user@hostname expect "password:" send "$PWD\r";期望 "sftp> " 发送 "put test_file.txt .*\r";期待“sftp>”发送“再见\r”;
  • 我需要验证 -> sFTP put 是否成功完成。请告诉我,检查这种情况的过程。
  • 也就是说,您使用的似乎是expect不要。sftp -b 与包含命令的脚本一起使用,如果任何操作失败,这将导致sftp 以失败的退出状态退出。

标签: shell


【解决方案1】:

根本不要使用expect

#!/usr/bin/env bash

batchfile=$(mktemp -t sftp-batchfile.XXXXXX) || exit
trap 'rm -f "$batchfile"' EXIT

cat >"$batchfile" <EOF
put test_file.txt $dest_location
bye
EOF

if sftp -b "$batchfile" "user@hostname"; then
  echo "The put succeeded"
else
  echo "The put failed"
fi

如 SFTP 手册页中所述,已添加重点:

最终使用格式允许使用 -b 选项进行自动会话。 在这种情况下,需要配置非交互式身份验证以避免在连接时输入密码(详见 sshd(8) 和 ssh-keygen(1))。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 2017-05-19
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多