対話型SSH接続が機能しない

対話型SSH接続が機能しない

何らかの理由で、次のエンコードが必要な基本スクリプトがあります。

vi test_run.sh    
#!/bin/sh
ssh -tt 192.168.1.20

私が実行するコマンドを実行するには:

cat test_run.sh | sh -

リモートサーバーに接続できますが、をls押すなどのコマンドを実行できず、画面がEnterフリーズします。

ベストアンサー1

sshそれを実行するシェルの標準入力ストリームを継承します。

実行中のシェルの標準入力はsshシェルスクリプト(パイプ)を読み取るために使用されるため、インタラクティブにcatコマンドを実行するためには使用できませんssh。これがセッションをインタラクティブにしよ-ttうとする理由です(そうでなければ文句を言うでしょう)。sshsshstdin が端末ではないため、疑似端末は割り当てられません。)しかし、前述のように、使用されたストリームはユーザーのコマンドを提供し、シェルはそのストリームを使用して実際のスクリプトを読み取るので機能しません。

代わりに、通常どおりスクリプトを実行してください。

sh test_run.sh

これにより、標準入力ストリームを使用してリモートシェルセッションで対話的にコマンドを実行でき、呼び出しにはsshまったく必要ありません。-tt

スクリプトが少し長い場合:

#!/bin/sh

ssh -tt 192.168.1.20
hostname
echo "DONE"

実行すると

cat test_run.sh | sh -

hostnameこれらの両方を実行するマシンechoは実際には離れてマシン。これは、シェルの標準入力(catスクリプトを含むから読み取ったストリームに接続されている)がに渡されるためですssh。これは、スクリプトのコマンドをリモートシステムで起動されたシェルに渡すことができます(リモートシェルに入力したように)。

おすすめ記事