首页 > 解决方案 > 期望在 while/for 循环中不使用 ssh 参数

问题描述

我正在尝试包含“for”或“while”循环来输入 IP 列表

即使我尝试使用以下解决方案, 在 shell 脚本中的 while 循环中运行期望命令

#!/bin/bash
 while read p; do
 {
  /usr/bin/expect<<EOF
 set timeout 3
 spawn ssh -q -o StrictHostKeyChecking=no  "root@192.168.102.$p" cat 
 /sys/class/net/enp0s3/address
 expect "Password:"
 send "xxxx\r";
 interact
  EOF
   }
  done<IP

下面是输出,在这里您可以在每次迭代中看到,命令执行没有发生,仅在终端中打印/回显

spawn ssh -q -o StrictHostKeyChecking=no root@192.168.102.105 
   cat /sys/class/net/enp0s3/address
   root@192.168.102.105's password: spawn ssh -q -o StrictHostKeyChecking=no 
   root@192.168.102.106 cat /sys/class/net/enp0s3/address
     root@192.168.102.106's password: spawn ssh -q -o 
    StrictHostKeyChecking=no root@192.168.102.107 cat /sys/class/net/enp0s3/address

我可以知道为什么 ssh 参数没有生效。我试过用单引号/双引号没有运气。

标签: bashexpect

解决方案


推荐阅读