Bash 脚本 : Send files to SFTP using Expect

标签 bash shell unix sftp expect

我必须从本地服务器向 SFTP 服务器发送一些 gzip 文件。

我的服务器信息

发行商 ID:Ubuntu 说明:Ubuntu 12.04.4 LTS 发布:12.04 代号:精确

创建了一个 bash 脚本,可以将文件发送到 sftp,但如果传输成功,我想发送电子邮件。

 #!/bin/bash
 HOST=hostname.domain
 PORT=22
 USER=username
 PASSWORD=password
 SOURCE_FILE=path/filename
 TARGET_DIR=PATH

 /usr/bin/expect<<EOD

 spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST
 expect "password:"
 send "$PASSWORD\r"
 expect "sftp>"
 send "put $SOURCE_FILE $TARGET_DIR\r"
 expect "sftp>"
 send "bye\r"
 EOD

现在,如果上述传输成功,我想发送成功电子邮件,如果没有发送带有错误消息的失败电子邮件。

请帮忙!!

谢谢。

最佳答案

您可以将脚本中的错误信息通过管道传输到文件,然后使用第二个脚本 grep 查找错误。第二个脚本甚至可以运行第一个脚本,并且可能看起来像这样:

/path/firstscript.sh 2>&1 > results.txt
if [ -n "$(grep 'error expected' results.txt)" ]
 then 
  echo "Found error" | mail -S "Error" you@example.com
 else
  echo "No error" | mail -s "Okay" you@example.com
 fi

就我个人而言,我发现最好通过进行第二次连接并在此处列出输出来检查目标站点上的文件。然后我检查第二个连接日志是否存在上传的文件。

我无法在三个不同的公司使用 rsync 或 key 身份验证,我为其编写文件传输脚本,因此我对那些在提出问题时得到“不要那样做”答案的人表示同情。当您正在寻找答案时,情况会更糟,因为您已经知道人们推荐的内容是行不通的。

以下是基于我实际所做的更接近的示例:

email_result.bash

#!/bin/bash
./uploadfile_example.bash 2>&1 > log.txt
if [ -n "$(grep "$(date +%b' '%d)" log.txt|grep "testfile")" ]
 then
  echo "File uploaded" |mail -s "Test success" you@example.com
 else
  echo "File not uploaded" |mail -s "Test fail" you@example.com
 fi

上传文件示例.bash

#!/bin/bash
datestamp=$(date +%s)
/bin/cp -v testfile.txt testfile.${datestamp}.txt
HOST="localhost"
USER="testuser"
PASS="YourPasswordHere"

expect -c "
spawn sftp ${USER}@${HOST}
expect \"password: \"
send \"${PASS}\r\"
expect \"sftp>\"
send \"put testfile.${datestamp}.txt\r\"
expect \"sftp>\"
send \"ls -l testfile.${datestamp}.txt\r\"
expect \"sftp>\"
send \"bye\r\"
expect \"#\"
"

/bin/rm -vf testfile.${datestamp}.txt

关于Bash 脚本 : Send files to SFTP using Expect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24687754/

相关文章:

python - 将 .BAT 文件转换为支持 linux 的文件

sql - 数据丢失的Sqoop导出

bash - 从文本文件中识别并删除特定的隐藏字符

linux - 检查 scp 命令的状态代码,如果失败,则在另一台机器上调用 scp

bash - 如何显示 bash session 的当前进程树?

bash - 如何将字符串作为 bash 脚本的命令行参数传递?

linux - *用于 Eclipse 的 nix Shell 编辑器

python - 带有 shebang 路径的可执行 .py 文件,python 给出错误,找不到命令

python - 如何搜索具有相同列值的行并在不存在时插入行?

bash - 在 bash `if [ .. ]` 语句中检查命令是否成功