2017-07-20 20 views
1

一部のプログラムでは、テキストをプロンプトに渡す唯一の方法は、expectコマンドを使用することです。stdinリダイレクトに失敗した場合のexpectコマンドの動作

ファイルからの入力のリダイレクト、または「ここのドキュメント」を使用したリダイレクトは機能しません。 期待どおりにテキストが正しく渡されますか?セキュリティ上の理由から、例えば

+0

「うまくいかない」とはどういう意味ですか? 'expect'はheredocsとリダイレクトされた入力を完全に処理できます。コードの[Minimal、Complete、Verifiable example](https://stackoverflow.com/help/mcve)を投稿してください。 – Aserre

+0

@Aserre、 'echo" password "を書くことができない' ssh'を検討してください。 ssh user @ remote'と入力しますが、実際にパスワードを入力する必要があります。 (今のところ、ssh認証を行うためのより良い、より安全な方法があることを無視して) –

答えて

3

sshはそれがTTYファイルパイプ、またはFIFOすることができstdinから読み取れません、ユーザーのパスワードを読み取る必要があります。代わりに、ssh/dev/ttyを直接開き、パスワードがある場合はtty(そうでない場合は/dev/ttyが利用できない場合は、sshが失敗する)が読み取られます。

(Linux上)次の例を参照してください:

$ strace ssh -o PreferredAuthentications=password 127.0.0.1 
[...] 
open("/dev/tty", O_RDWR)    = 4 
close(4)        = 0 
open("/dev/tty", O_RDWR)    = 4 
[...] 
write(4, "[email protected]'s password: ", 27) = 27 
[email protected]'s password: 
read(4, 

ん期待はptyを作成し、そのPTY上でコマンドを実行しています。

関連する問題