Bash

期望使用 bash 進行 ssh 和 ping 到遠端伺服器

  • April 24, 2020

我正在開發程式碼。從伺服器,A ssh 會話將使用 spawn 建立到伺服器 B,然後從伺服器 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 命令很陌生

你不能像那樣混合expect和shell。發送密碼後,expect 腳本結束,expect 程序退出,ssh 連接消失。如果要從 B ping C,則需要將該部分放入期望程式碼中。

引用自:https://unix.stackexchange.com/questions/581925