期望使用 bash 进行 ssh 并 ping 到远程服务器

期望使用 bash 进行 ssh 并 ping 到远程服务器

我正在开发代码。从服务器,将使用 spawn 与服务器 B 建立 ssh 会话,然后从服务器 B sftp 文件传输到服务器 C。服务器 A 和 B 可以是无密码的,也可能会要求输入密码,具体取决于早期的用户配置。请找到下面的代码:

 #!/bin/bash
 /usr/bin/expect <<EOD
 lassign $argv 1 2 3 4 file1 file2
 spawn ssh -oStrictHostKeyChecking=no root@$1
 sleep 2
 expect {
 "#" {
 send_user "successfully logged in!\r"
     }
 "Password:" {
  send "$2\r"
   }
 }
 EOD
 sleep 3
 pinging=$( ping $3 -w1 | head -n 2 | grep -i time )
 if [[ $pinging == *"time"* ]];
 then
            echo "ping successfull to:" $3
 else
            echo "ping not successfull:"$3 "Contact IT Support"
            exit
 fi

问题是 if-else 循环未正确执行密码提示或登录到 ssh 远程会话后没有密码提示。即使登录成功,它仍会询问密码。此外,Ping 到服务器 C 是从服务器 B 而不是从服务器进行的A. 我对 TCL 命令还很陌生

答案1

你不能像这样混合expect 和shell。发送密码后,expect 脚本结束,expect 进程退出,并且 ssh 连接消失。如果你想从B ping C,你需要将该部分放入expect代码中。

相关内容