• 把yes/no取消掉


    expect   编程语言

    本身是一门编程语言,它有自己的语法可以独立编程语言,凡是非交互式的变成交互式的先想想如果没有就只有expect

    让它永远没有yes/no,改客户端

    #cat /a.sh  写在脚本,执行一下。

    sed -i 's/# StrictHostKeyChecking ask/StrictHostKeyChecking no/' /etc/ssh/ssh_config

    sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/ssh_config

    取消ssh客户端访问ssh服务器的时候让输入yes/no,直接输入密码:

    /usr/bin/expect <

    set timeout 300 设置一个超时时间

    spawn ssh-keygen 生成一条指令

    expect "Enter file in which to save the key (/root/.ssh/id_rsa):" (这里的expect是捕获)

    send "\n" 发送一个回车

    expect "Enter passphrase (empty for no passphrase):" (再去捕获)

    send "\n" 发送回车

    expect "Enter same passphrase again:" 捕获

    send "\n" 发送回车

    expect是用来做捕获的,原来是捕获一句话,因为这句话是固定的,自己手动尝试的时候永远长这样,下面做的是捕获的字符串可能不存在,所以需要判断一下,能不能捕获到第一个关键字,捕获到怎么样,捕获不到怎么样,捕获不到就接着捕获下一个,下一个捕获到怎么样,这就是一个条件判断。我举的是ssh-copy   ssh的时候也一样。

    spawn ssh-copy-id 192.168.22.251  如果是批量换成变量

    expect {

    "yes/no" { send "yes\n"; exp_continue }

    "root@192.168.22.251's password:" { send "liuliu\n"}

    }

    expect eof

    EOF

    ssh-add

    ssh 192.168.22.251

    ssh的时候会有yes/no,第二次可能就没有了。在用expect处理这件事的时候得做一个判断,判断它捕获的是带yes/no的还是带密码的。完全可以把它取消掉。

     捕获的时候判断它关键字里是不是带yes/no如果是就发送一个yes,继续发送一个exp_continue。

    如果它没有捕获到yes/no,它就会尝试下面的关键字是不是捕获到了password,如果捕获到password就发生密码+回车。相当于多条件判断。

    单个拷贝

    send下面写密码,这就拷过去了,再拷一遍就报错了。

     方式一: 如果拷贝过去了,代码会报错,解决不了就不解决了,因为已经拷完了。

    方式二:去捕获一下关键字比如有没有warning,或者是关键字,如果捕获到就啥也不干了。

    批量拷贝,

     首先得有一个文件,hosts.txt要存放所有的ip地址。这几个ip我要读到它们,把它的内容读过来,交给一个变量,如何把它写到一个for循环里,变量里面是存放的是所有ip地址,用i去从里面一个一个执行取ip,取到一个执行。

     执行脚本,

     远程卸载软件:ssh 192.168.22.10 "yum erase lftp -y"

     远程安装软件:ssh 192.168.22.10 "yum install lftp -y"

  • 相关阅读:
    聚观早报|腾讯员工平均月薪超8万;马斯克考虑卸任特斯拉CEO
    github在线编程
    扩展期权定价模型到二元期权定价
    探索APP流量变现的新途径
    Spring JDBC
    Panda3d 动画序列
    高德地图获取行政区域并且获取经纬度
    pgpool-II常见错误
    【无标题】
    SQL 函数
  • 原文地址:https://blog.csdn.net/weixin_53150440/article/details/127591997