写在前面
sshpass之外的另一种自动填充密码方式,不仅仅是scp命令,适配之后可以用到其他所有需要交互输入的工具上
需要安装expect工具
ubuntu上apt install expect
使用
脚本命名为autoscp后放在/usr/sbin目录下
代码
#!/bin/bash
timeout=30
if [ ! $# -eq 3 ];then
echo -e "\033[33musage:\033[0m"
echo -e "\033[33m>> autoscp [filename] [fullurl] [password]\033[0m"
echo -e "\033[33mexample:\033[0m"
echo -e "\033[33m>> autoscp filea root@192.168.27.26:/home 123456\033[0m"
exit 6
fi
main(){
filename=$1
fullurl=$2
password=$3
echo -e "\033[34m \033[0m"
expect -c "
set timeout ${timeout}
set res 99
spawn scp ${filename} ${fullurl}
expect {
\"yes/no\" {send yes\n;exp_continue;}
\"*assword*\" {send ${password}\n;exp_continue}
\"100%\" {set res 0}
\"*denied*\" {exit 2}
\"No such file or directory\" {exit 1}
\"*Could not resolve hostname*\" {exit 5}
\"lost connection\" {exit 5}
timeout {exit 3}
\"*WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!*\" {exit 4}
}
interact
exit ${res}
"
}
main $@