技术解析
打算做一个 ssh 免密登陆的脚本,用到了 expect 命令,但总是无法处理密码出错情况。代码如下:
ssh_copy_id_auto() {
user=$1
pass=$2
host=$3
key=$(echo ~/.ssh/id_rsa.pub)
expect << EOF
set timeout 5;
spawn ssh-copy-id -i $key [email protected]$host;
expect {
*(yes/no)?* { send yes\r; exp_continue; }
*password:* { send $pass\r; exp_continue; }
"*try again*" { exit 1; } # 密码错误时应该直接退出,错误码 1
eof { exit 0; }
};
EOF
}
无法匹配到密码出错的情况,不会退出,继续提示输入密码。 不知道是哪里的问题?