VMにログインして、そこでコマンドを実行する必要があります。同じトピックに関連するすべての質問に答えましたが、EXPECTで解決策が見つかりませんでした。SSHの使用中にパスワードを渡す必要があるため、EXPECTを使用しています。
スクリプトの実行中に「コマンドが見つかりませんエラー」が発生しますが、手動で正常に動作しています。
#!/usr/bin/expect -f
set user [lindex $argv 0]
set to [lindex $argv 1]
set pass [lindex $argv 2]
set command [lindex $argv 3]
puts "$user, $to , $command and $pass ."
# connect via scp
spawn sudo ssh -t -t -v $user@$to << EOF
ls
EOF
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send $pass\n
}
}
interact
受信したエラー:
spawn sudo ssh -t -t -v username @ server_ip << EOF「ls」の実行中にコマンド名「ls」が無効です(ファイル「./establishSSHConnection.sh」の10行目)
'ヒア'ドキュメントでリモートシステムにコマンドを送信しようとしているようです。
spawn sudo ssh -t -t -v $user@$to << EOF
ls
EOF
代わりに、「exp_send」を使用して、「interact」の直前にlsコマンドを送信する必要があります。つまり、「here」ドキュメントを削除します。
spawn sudo ssh -t -t -v $user@$to
そして最後にlsコマンドをここに置きます:
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "$pass\r"
}
}
exp_send "ls\r"
interact
編集:
ああ、私は誤解しました。コマンドを実行したいだけの場合は、もう一方の端に接続を閉じるように指示する必要があります。
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "$pass\r"
}
}
exp_send "ls\r"
exp_send "exit\r"
expect {
eof {puts "Connection closed"}
timeout {puts "Connection timed out"}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加