!/usr/bin/期待

!/usr/bin/期待

Centos 7がインストールされているPCで実行され、SSHを使用してCentos 7がインストールされている他のPCに接続し、「ls -la」などのコンソールコマンドを実行し、その出力をファイルに保存するスクリプトを作成する必要があります。後で出力してください。

私は次のようなEXPECTスクリプトを書いた:

ssh_connection.exp:

#!/usr/bin/expect -f
set timeout 120
spawn ssh [email protected]
expect "assword:"
send "PASSWORD\r"
expect "prompt#"
sleep 5
puts "Executing ls -la"
send "ls -la\r"
sleep 10
puts "Executing ps -af"
puts "ps -af\r"
sleep 10
puts "Closing the ssh session\r"
send "exit\r"

スクリプトはsshを介してIP = 129.0.0.10のコンピュータに正しく接続し、「puts」に表示される画面にメッセージを表示します。 ls -la 実行 ps -af 実行 ssh セッションを閉じる

ただし、sendに送信されたコマンドを実行した結果は表示されません。

ls -la
ps -af

このスクリプトにはどのような問題がありますか?

後でbashスクリプトまたはCプログラムを使用して分析できるように、前のコマンドの出力をファイルに保存するにはどうすればよいですか?

ベストアンサー1

expectを使用する必要はありません。このsshコマンドは、SSH接続を介して実行するコマンドに追加の引数を使用できます。

ステップ1

SSHキーペア(google it)を設定し、SSHキーをリモートサーバーにコピーします。そのために、ssh-copy-id次のU&L Q&Aへの回答をご覧ください。SSHを使用して接続できるように、リモートサーバーの秘密鍵をローカルコンピュータに正しくコピーするにはどうすればよいですか?

ステップ2

これで、キーを使用してサーバーにSSHで接続する機能を使用すると、上記の問題は次のとおりです。

$ ssh [email protected] "ls -la; ps -af"

「いいね」を押してご利用ください。ここにあるドキュメント(heredocs、別名.here-docs)この技術をさらに強化してください。

$ ssh [email protected] <<EOF
> ls -la
> ps -af
> EOF

または、コマンドをファイルに入れて次に渡しますssh

$ ssh [email protected] < my.cmds

おすすめ記事