unixのshシェルを使ってexpectを使用してリモート操作(ssh)を行う際、その結果を取得する方法を教えてください。


たとえば、
#!/bin/sh
P=pass
expect -c "
spawn ssh -l user remotehost command
expect password:
send $P
interact
"
というシェルにおいてcommandの結果を取得することを目的としています。

このシェルをtest.shとすると、
test.sh > log
でも実現できるのですが、それだとパスワード入力などのコマンド受け渡しまでlogに保存されます。

純粋にcommandの結果だけを取得したいのですが、ご教授のほど、よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:
  • 終了:2011/11/21 00:23:43

ベストアンサー

id:a-kuma3 No.2

回答回数4964ベストアンサー獲得回数2150

  • log_user で制御する
#! /usr/local/bin/expect
log_user 0
spawn ssh -l user remotehost command
expect password:
send "password\r"
interact

  • log_file で、出力先を指定する
#! /usr/local/bin/expect
spawn ssh -l user remotehost command
expect password:
send "password\r"
log_user output.txt

expect のスクリプトで書いてますが、シェルスクリプトで expect のコマンドに書いても同じです。

■参考
http://linuxjm.sourceforge.jp/html/expect/man1/expect.1.html
http://nsa.kpu-m.ac.jp/gijutu/expect/howto-expect.html

id:cochoo

ご回答ありがとうございます。
log_fileは指定した位置からの出力結果をログに格納することが確認できました。
一応、これで期待する結果となりました。
ありがとうございました。

2011/11/21 00:24:04

その他の回答1件)

id:okamotoy No.1

回答回数131ベストアンサー獲得回数15

 シェルの先頭(#!/bin/sh の次)で「stty -echo」とやるといかがですか.

id:cochoo

ご回答ありがとうございます。
以下の処理でできると思ったのですが、結果として変わりませんでした(パスワードも出力される)
もう少し検討してみます。
stty -echo
spawn ssh -l user remotehost
expect password:
stty echo
send command\r

2011/11/21 00:17:33
id:a-kuma3 No.2

回答回数4964ベストアンサー獲得回数2150ここでベストアンサー

  • log_user で制御する
#! /usr/local/bin/expect
log_user 0
spawn ssh -l user remotehost command
expect password:
send "password\r"
interact

  • log_file で、出力先を指定する
#! /usr/local/bin/expect
spawn ssh -l user remotehost command
expect password:
send "password\r"
log_user output.txt

expect のスクリプトで書いてますが、シェルスクリプトで expect のコマンドに書いても同じです。

■参考
http://linuxjm.sourceforge.jp/html/expect/man1/expect.1.html
http://nsa.kpu-m.ac.jp/gijutu/expect/howto-expect.html

id:cochoo

ご回答ありがとうございます。
log_fileは指定した位置からの出力結果をログに格納することが確認できました。
一応、これで期待する結果となりました。
ありがとうございました。

2011/11/21 00:24:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません