修正:stdinは端末ではないため、疑似端末は割り当てられません



問題を排除するために楽器を試してください

ほとんどの場合、スクリプトから何らかのSSHコマンドを実行している場合にのみ、紛らわしい「stdinは端末ではないため、疑似端末は割り当てられません」というエラーが表示されます。コマンドラインから同じコマンドを実行している場合は、完全に正常に機能する可能性があります。



先に進む前に、SSHエージェントに公開鍵が追加されていることを確認してから、sshの使用を再試行してください。キーがない可能性があります。一方、これが機能しない場合は、スクリプトで少しトラブルシューティングを行う必要があります。



方法1:疑似tty割り当てを強制および無効にする

問題をすばやく解決できるコマンドラインオプションのペアがあります。疑似端末の割り当てを強制するために、ssh -t -t -Rに続いて、接続しようとしていた残りの部分を試してください。たとえば、ssh -p 80 appuals@ssh.example.comを使用してexample.comのアカウントにログインするとします。これは、もちろん、存在しないドキュメントのダミーです。



実行してみてください。 ssh -t -t -R -p 80 appuals@ssh.example.comで、これで問題が解決するかどうかを確認してください。もちろん、システムに正常にログインするには、名前を実際のアカウントとホスト名に置き換える必要があります。これにより端末の割り当てが強制されるため、stdinは端末エラーではないため、疑似端末が割り当てられないことはわかりません。

一方、エラーメッセージの定数文字列が表示される可能性があります。一部のユーザーは、これは面白いと見なされる可能性があると述べています。

とはいえ、確かにイライラするので、Ctrl + Cを使用してプロセスを強制終了します。



疑似端末

-tスイッチを1つだけ使用するか、数を増やしてみてください。これが機能しない場合は、コマンドで-tスイッチを-Tスイッチに置き換えます。例: ssh -T -R -p 80 appuals@ssh.example.comで、それが機能するかどうかを確認します。

この方法では、疑似端末割り当てプロセス全体が完全に無効になるため、強制的に機能しない場合に機能する可能性があります。もちろん、これはコマンドラインからの問題ではありませんが、スクリプトからどのオプションが機能するかを見つけたら、そのサーバーにアクセスするために実行する必要がある将来のスクリプトで使用できるように、必ずメモしてください。

sshコマンドはこれらの2つの反対のオプションに同様の名前を付けたので、-tは疑似端末の割り当てを強制し、-Tはそれを無効にすることに注意してください。これらのオプションでは大文字と小文字が区別され、sshが機能するには従来のTTY端末が必要なため、スクリプト内から必要になることがよくあります。当然、あなたの場合、この目的のためにターミナルエミュレータを使用することになります。

方法2:sshpassを使用する

デフォルトでは含まれていないsshpassコマンドを使用すると、スクリプトの動作が向上する場合があります。試してみたい場合、または特定のユースケースで必要な場合は、いつでもsudo apt-get installsshpassまたはsudoyum installsshpassを使用してインストールできます。

まだ使用していない場合は、おそらく必要ありません。それでも、同じ手法を使用して、この種の環境でも疑似端末の割り当てに関連するエラーメッセージを驚かせることができます。

たとえば、sshpass -p password ssh -T appuals@ssh.example.comを使用して、スクリプト内からシステムを強制的に動作させます。

方法3:ジョブ管理エラーの修正

これをすべて修正した後でも、別のエラーメッセージが表示される場合があります。 ttyにアクセスできないという警告が表示された後、シェルにジョブ制御がないことを通知された場合は、ある程度正常に動作できるはずです。

このエラーは、csh、tcsh、またはAlmquistやその他のシェルに関連するリモートサーバーで何かが不規則であることが原因で発生します。他のエラーメッセージが表示されていたために気づかなかったかもしれませんが、疑似端末について他に何も表示されない場合は、通常と同じように比較的続行できるはずです。

ただし、この場合、Ctrl + Zを使用してプロセスを停止することはお勧めしません。これは、プロセスを再起動する方法がない場合があるためです。終了時にジョブが停止しているというエラーメッセージが表示された場合、ログアウトは許可されません。

停止した仕事

psコマンドとkillコマンドを使用して、プロセスで作業を失うことを気にしないと仮定して、シャットダウンできないジョブをすべて閉じます。これで終了できるようになります。

タグ Linuxのハウツー ssh 読んだ3分