1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #!/usr/bin/expect # 判断输入的参数是否为 3 个,如果不为 3 个,就打印错误信息,退出该程序。 if { $argc != 3 } { puts stderr "Usage: test1 host-address username host-password\n" exit 1 } # 设置超时时间为 60 秒 set timeout 60 # 将命令行输入的第一个参数作为将要登录的 SSHD 服务器 set host [lindex $argv 0] # 第二个参数是用户名,赋值给 name, 之后用 $name 格式来使用 set name [lindex $argv 1] # 第三个参数是以 $name 登录 $host 的口令 set password [lindex $argv 2] ##set timeout 60 ##set password "cluster" ##set name “root” ##set host "192.168.0.4" #root 用户的 rsa key 放在 /root/.ssh 中,其他用户则放在 /home/$name/.ssh if { $name == "root"} { spawn scp /$name/.ssh/id_rsa.pub $name@$host:/tmp } else { spawn scp /home/$name/.ssh/id_rsa.pub $name@$host:/tmp } # 等待上个命令的响应 expect { "(yes/no)?" { send "yes\n" expect "assword:" send "$pasword\n" } "assword:" { send "$password\n" } } # 输入密码后,拷贝成功,出现 100% 字符串,作为预期响应 expect "100%" # 调用 ssh 以 $name 用户名登录到 $host 上 spawn ssh $host – l$name # 期待提示出入密码的响应 expect "assword:" # 接收密码 send "$password\n" expect ":~#" # 将刚刚拷贝的 rsa key 添加到用户的 home 目录下的 ./ssh/authorized_keys if { $name == "root"} { send "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys\n" } else { send "cat /tmp/id_rsa.pub >> /home/$name/.ssh/authorized_keys\n" } expect ":~#" # 操作成功后,退回 SSH 客户端机器 send "exit\n" expect "#" # 下面将测试能否自动登录,不用输入密码 spawn ssh $host – l$name expect { "Welcome" { send_user "Auto login the server successfully!" } "assword:" { send_user "failed to login the server!" } } send "ls\n" expect ":~#" # 退出 $host send "exit\n" # 程序结束 expect eof |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |