コードを開発中です。サーバーで Spawn を使用してサーバー B と SSH セッションを確立し、サーバー B からサーバー C にファイルを SFTP に転送します。サーバー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リモートセッションにログインした後にパスワードプロンプトがないことです。ログインに成功しても、まだパスワードを求められます。また、サーバCに対するPingは、サーバAではなくサーバBで発生する。私は最初にTCLコマンドに触れました。
答え1
このように期待とシェルを混在させることはできません。パスワードを送信すると、予想スクリプトが終了し、予想プロセスが終了し、SSH接続が消えます。 BからCをpingするには、その部分を予想コードに入れる必要があります。