Bash
期望使用 bash 進行 ssh 和 ping 到遠端伺服器
我正在開發程式碼。從伺服器,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,則需要將該部分放入期望程式碼中。