私はsshを通していくつかのルータに接続するexpectスクリプトを持っています。これらのルータはすべて同じパスワードを持っています(間違っています)、スクリプトはルータに接続できるようにパスワードを知っている必要があります。現在、パスワードはコマンドラインで引数としてスクリプトに渡されますが、これは自分の.bash_historyファイルと実行中のプロセスにそのパスワードのトレースがあることを意味します。だから代わりに、可能であれば、私はユーザーにパスワードの入力を求められるようにしたいと思います。パスワードのためのexpectスクリプトプロンプトを作成するにはどうすればよいですか?
ユーザーに期待どおりのパスワードを要求することができるかどうか知っていますか?
ありがとうございます。
編集:ルータの代わりにサーバに接続していた場合は、パスワードの代わりにsshキーを使用している可能性があります。しかし、私が使用しているルータはパスワードをサポートしています。私はそれがタイミングの問題だと思う:私は正確な理由はわからない - それはsend_user
を呼び出す前stty -echo
を呼び出すことが重要だと
# grab the password
stty -echo
send_user -- "Password for [email protected]$host: "
expect_user -re "(.*)\n"
send_user "\n"
stty echo
set pass $expect_out(1,string)
#... later
send -- "$pass\r"
注:
クールありがとう!この言語がどれほど寛容でないのか驚くべきことです。「set pass $ expect_out(1、string)」と書かれました。単語 "string"の前にスペースがあり、それが爆発します。私は多くのドキュメンテーションを見つけることができません。私は期待していた以外の解決策があることを望みます。とにかく、ありがとう。 – MiniQuark
"多くのドキュメントが見つかりません"一般的によく書かれていると考えられている第2版の本があります。真剣に、その本をチェックしてください。 –
Re: "1"と "string"の間のスペース - Tcl(したがって期待する)には多次元配列がありません。配列キーは単なる文字列であり、 "1、string"と "1、string"は異なります。 –