我正在运行这个脚本来复制本地的模式文件,但是即使传递硬编码值也要求输入密码。
脚本:
PASSWORD="xyz"
sftp -oport=1002 user@host:/dir/archive/file*.txt /di/data/
<< EOF
$PASSWORD
quit
EOF
收到错误:
-bash-4.1$ sh sftp_with_password.sh
Connecting to user@host...
Password Authentication
答案 0 :(得分:1)
expect脚本可以完成这项工作。
例如 copy-sftp.exp :
#!/usr/bin/expect
set password [lindex $argv 0]
spawn sftp -oport=1002 user@host:/dir/archive/file*.txt /di/data/
expect "Password"
send "$password\r"
send "quit\r"
然后你可以执行它:
expect copy-ftp.exp $PASSWORD
答案 1 :(得分:0)
感谢贡萨洛·马修(Gonzalo Matheu),我设法使用代理将send-sftp.exp传送到sftp:
#!/usr/bin/expect
set timeout -1
set password [lindex $argv 0]
set file [lindex $argv 1]
spawn sftp -o "ProxyCommand /usr/bin/connect -H <proxy-host>:<proxy-port> %h %p" <sftp-Username>@<sftp-HOST>
expect "password:"
send "$password\r"
expect "sftp>"
send "put $file\r"
expect "sftp>"
send "quit\r"
然后我执行它:
expect send-sftp.exp $PASSWORD /PATH/TO/MYFILE.zip
设置超时允许传输不因期望的等待超时而停止,您可以根据需要进行调整;)