今天打算将一台加载机上的文件按文件名发送到远程加载机NAS上的不同目录。由于以后还会有多次发送,所以就想写个脚本,用scp传输。但终端scp传输需要输入输入远程加载机的密码。所以找了下方法,一种是通过公钥认证授权的方式,因为我没有远程机器所有的权限而放弃。另一种是用expect的方式:
截取一部分代码供记录参考:
#!/usr/bin/expect -f
set password bdpguest1221
spawn bash -c "scp sjh*and11 bdpguest@10.230.17.1:/BDPNAS/BDPDATA/OUT/q1/BEJ11/BDP"
set timeout 3
expect {
"Are you sure you want to continue connecting (yes/no)?" {send "yes\r";exp_continue}
}
expect "Password:"
set timeout 3
send "$password\r"
set timeout -1
spawn bash -c "scp sjh*and02 bdpguest@10.230.17.1:/BDPNAS/BDPDATA/OUT/q1/TIJ02/BDP"
set timeout 3
expect {
"Are you sure you want to continue connecting (yes/no)?" {send "yes\r";exp_continue}
}
expect "Password:"
set timeout 3
send "$password\r"
set timeout -1 %-1表示直到文件传完再执行下一步。
expect eof