ユーザー名とパスワードを提供するためにエコーを使用するときは、telnetを閉じないでください。

ユーザー名とパスワードを提供するためにエコーを使用するときは、telnetを閉じないでください。

ログインするために Telnet にユーザー名とパスワードを入力すると、次のコマンドを実行して自動的に閉じます。

echo password | telnet mymachine -l mysuername

コンソール出力:

Connected to mymachine.
Connection closed by foreign host.

その後、接続が閉じます。一度ログインしたときにユーザー名とパスワードを入力しながら接続を維持する方法はありますか?

更新:毎回ユーザー名とパスワードを入力せずにログインするために許可された回答に基づいてエイリアスを作成しました。

alias logon='rm loginscript; echo \#\!\/usr\/bin\/expect >> loginscript ; echo spawn telnet remotemachine -l username >> loginscript ; echo expect Password: >> loginscript ; echo send password"\\r" >> loginscript ; echo expect -- \{\$ \} >> loginscript ; echo interact >> loginscript; chmod 777 loginscript; ./loginscript'

答え1

対話型セッションを続行する場合は、一般的な方法は次のようにexpectログインすることです。

#!/usr/bin/expect
spawn telnet mymachine -l myusername
expect Password:
send password\r
expect -- {$ }
interact

答え2

パスワードを送信した後もセッションとやり取りしたい場合は、telnetローカル端末でセッションへの入力を提供する必要があります。

(echo password; cat) | telnet -l user host

実装がローカル端末と対話しようとする方法によっては、telnet次のことを行う必要があります。

saved=$(stty -g); stty raw -echo
(echo password; cat) | telnet -l user host
stty "$saved"

でも:

saved=$(stty -g); stty raw -echo
(echo password; cat) | telnet -l user host 2>&1 | cat
stty "$saved"

cat -u(一部のシステムでは置き換える必要があるかもしれませんcat

別のオプションは使用expectパイプの代わりに擬似端末を使用してアプリケーションと対話します(telnetdもう一方の端でもptyを生成するため、この場合、追加のptyは必ずしも必要ではありません)。

関連情報