在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
shell脚本无密码登录 expect的使用方法详解 今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。 从网上查到使用expect可以,简单研究了一下,效果不错。 因为我的操作系统没有安装expect,所以直接"yum -y install expect",你可以根据你的操作系统安装expect,或者源码编译。 一、单独写一个脚本 如 auto_scp.sh: #!/usr/bin/expect #使用第一个参数 set server_ip [lindex $argv 0] #后面的也可以用参数[lindex $argv n] set server_port 22 set server_dir /home/test set server_user test set server_pswd test set scp_file auto_scp.sh # 设置超时时间 set timeout 60 spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir expect { "passphrase" { send "$server_pswd\n"; } "password" { send "$server_pswd\n"; } "yes/no" { send "yes\n"; exp_continue; } } expect eof 我这里的变量都是随意设置的,你可以根据你的情况进行选择,保存退出之后,对该文件加上可执行权限,运行 "passphrase"和"password"等就是要监测的输入提示的一部分,send "$server_pswd\n"就是要执行的命令。 二、在脚本中使用----我比较喜欢这个 我这里使用的是Here document方法。 ...... ...... expect <<!! set timeout 60 spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir expect { "passphrase" { send "$server_pswd\n"; } "password" { send "$server_pswd\n"; } "yes/no" { send "yes\n"; exp_continue; } } expect eof !! ...... 变量都是我从配置文件中获取的,这里不再赘述了。 三、在脚本中使用 也是在脚本使用,但是不是用的Here document方法,而是使用expect -c 参数书,"-c"选项后面的字符串填充的就是命令。但是要注意本身字符串的转义符。 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! |
请发表评论