美文网首页
使用expect远程登录主机

使用expect远程登录主机

作者: 哆来咪发都不会 | 来源:发表于2019-08-27 19:16 被阅读0次

    expect就是一个脚本,以expect或者exp为后缀

    安装
    yum -y install expect    //通过expect将代码分发至不同的服务器
    
    实例:自动远程登录

    ssh远程登录一台主机后,会在know_hosts中新增1条记录,下次再登录时就不用输入用户名密码。但是有一个问题,如果我需要在100台新机器上登录,那就需要输入100次用户名密码,这之后才不用输入,这太麻烦了,因此就用到了expect来解决。

    #!/use/bin/expect
    set host "192.168.100.120"  //expect中定义变量需要加一个set
    set passwd "123456"
    spawn ssh root@$host
    expert {
    "yes/no" { send "yes\r";exp_continue }  //第1次登录服务器时,会提示是否连接。此处截取"yes/no",并且发送yes,\r表示回车,exp_continue表示继续
    "assword:" { send "$passwd\r" }  //截取assword,并发送password
    }
    interact  //退出expect,不退出远程的机器。不加这一行,会立刻退出远程机器。
    expect eof  //远程登录以后,会停留2秒然后退出远程的机器
    //expect 默认超时时间10s,10s后断开连接
    set timeout -1  //永久不退e出,用Ctrl +C退出
    set timeout 5  //5秒后退出,如果设置不生效,可以检察下是否需要加上expect eof
    
    实例:远程登录并执行命令
    #!/use/bin/expect
    set host "192.168.100.120"  
    set passwd "123456"
    spawn ssh root@$host
    expert {
    "yes/no" { send "yes\r";exp_continue }  
    "assword:" { send "$passwd\r" }  
    }
    expect "]*"  //匹配 ]* 的内容,其实就是[root@localhost sum] # 的最后那段
    send "touch 1.txt"
    expect "]*"
    send "touch 2.txt"
    expect "]*"
    send "exit\r"
    
    传递参数
    #!/use/bin/expect
    set user [lindex $argv 0]  //第1个参数赋值给user
    set host [lindex $argv 1]  //第2个参数赋值给host
    

    相关文章

      网友评论

          本文标题:使用expect远程登录主机

          本文链接:https://www.haomeiwen.com/subject/mhwqectx.html