Linux 修改基于expect的SSH脚本以在不支持';我不需要密码

Linux 修改基于expect的SSH脚本以在不支持';我不需要密码,linux,tcl,ksh,expect,Linux,Tcl,Ksh,Expect,当Linux机器在登录后请求密码时,以下expect脚本可以正常工作。但是我们的一些Linux机器不需要SSH密码(我们可以不用密码登录),因此我需要更改expect脚本以支持没有密码的机器。我该怎么做 $ expect_test=`cat << EOF set timeout -1 spawn ssh $IP hostname expect { ")?" { send "yes\r" ; exp_continue }

当Linux机器在登录后请求密码时,以下expect脚本可以正常工作。但是我们的一些Linux机器不需要SSH密码(我们可以不用密码登录),因此我需要更改expect脚本以支持没有密码的机器。我该怎么做

$ expect_test=`cat << EOF
set timeout -1
spawn  ssh $IP  hostname
    expect {
              ")?"   { send "yes\r"  ; exp_continue  }
              word:  {send "pass123\r"     }
    }
expect eof
EOF`

$ expect -c "$expect_test"
在不需要密码的机器上运行时:

 $ IP=10.17.18.6
 $ expect -c "$expect_test"
 spawn ssh 10.17.18.6 hostname
 sh: /usr/local/bin/stty: not found
 This computer system, including all related equipment, networks and network devices     (specifically including Internet access),is pros
 yes
 Password: 
 Linux1_machine
$ IP=10.10.92.26
$ expect -c "$expect_test"
spawn ssh 10.10.92.26 hostname
sh: /usr/local/bin/stty: not found
Linux15_machine
expect: spawn id exp5 not open
while executing
"expect eof"

将超时值从-1更改为其他值,如果预期字符串未在给定的超时时间内显示,则这将导致expect转到下一行

如果未提示输入密码,则当前值,-1将导致其永久阻止

更新:

 set timeout 5
 spawn  ssh $IP  hostname
       expect {
                 ")?"   { send "yes\r"  ; exp_continue  }
                 word:  {send "pass123\r"     }
                 eof    {exit}
      }

将超时值从-1更改为其他值,如果预期字符串未在给定的超时时间内显示,则这将导致expect转到下一行

如果未提示输入密码,则当前值,-1将导致其永久阻止

更新:

 set timeout 5
 spawn  ssh $IP  hostname
       expect {
                 ")?"   { send "yes\r"  ; exp_continue  }
                 word:  {send "pass123\r"     }
                 eof    {exit}
      }

使用此expect命令:

expect {
    ")?"   {send "yes\r";     exp_continue}
    word:  {send "pass123\r"; exp_continue}
    eof
}

这样,如果在“password:”之前遇到EOF,脚本将正常运行。

使用此expect命令:

expect {
    ")?"   {send "yes\r";     exp_continue}
    word:  {send "pass123\r"; exp_continue}
    eof
}

这样,如果在“password:”之前遇到EOF,脚本将正常运行。

我将其设置为10,但仍然会出现错误-->expect:spawn id exp5 not open,同时在脚本中的超时行上方执行“expect EOF”Add exp_internal 1,并查看它的输出。还可以在第一个expect部分中添加eof{exit},在一行下面的新行上添加单词:not clear在哪里添加“eof”您可以用添加的eof更新我的脚本吗?我将其设置为10,但仍然在执行“expect eof”时出现错误-->expect:spawn id exp5 not open将exp_internal 1添加到脚本中超时行的正上方,并查看它的输出。另外,在第一个expect部分中添加eof{exit},在一行下面的新行上添加单词:不清楚在哪里添加“eof”,您可以用添加的eof更新我的脚本吗?您可能决定只发送一次密码。幸运的是,通过一点额外的逻辑,这很容易实现。您可能决定只发送一次密码。幸运的是,这很容易通过一些额外的逻辑来实现。