expect Password free login

expect免密登录

代码如下:

[root@RedHat ~]# vim expect.sh 

#!/bin/bash
#免密登录

IP="192.168.157.129"
USERNAME="root"
PWASSWORD="123"

yum -y -q install expect &>/dev/null
expect << EOF
    set timeout 6 
    spawn ssh-keygen -t rsa  
    expect "(/root/.ssh/id_rsa):"       {send "\r"}
    expect "passphrase):"               {send "\r"}
    expect "again:"                     {send "\r"}
    expect "#"                          {send "exit \r"}
EOF           
expect << EOF 
    set timeout 6
    spawn ssh-copy-id ${USERNAME}@${IP}
    expect "connecting"                 {send "yes\r"}
    expect "password:"                  {send "${PWASSWORD}\r"}
    expect "#"                          {send "\r"}
EOF 

<< EOF
.......
EOF #表示里面的内容均由expect命令去执行
set timeout 6 #设置超时时间为6秒,下面的代码需在6秒钟内完成,如果超过,则退出。用来防止ssh远程主机网络不可达时卡住及在远程主机执行命令宕住
spawn #激活一个交互式会话,在系统中创建一个进程
ssh ${USERNAME}@${IP} #ssh登陆远程主机
-o "StrictHostKeyChecking no" #不弹出“(yes/no)?”的对话框
expect "password:" #期望终端出现包含"password:"的字段。如果没有出现,则不执行后面的代码,会卡在此处,达到超时时间退出。
{send "${PWD}\r"} #传递给交互终端的指令,这里是发送密码。\r相当于在终端敲了下回车
{send "hostname\r"} #向远程主机发送hostname的指令
{send "exit\r"} #最后一个expect不会执行,因此不会发送exit的指令,这里用来标识该expect要退出了

posted @ 2021-03-31 18:06  离愁落雨  阅读(154)  评论(0)    收藏  举报