ログインするために 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は必ずしも必要ではありません)。