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

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

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

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

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

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

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

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

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

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

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

方法2:sshpassを使用する

一部の人々は、スクリプトがデフォルトで含まれていないsshpassコマンドでよりうまく機能することに気付くかもしれません。試してみたい場合、または特定のユースケースで必要な場合は、いつでもsudo apt-get installsshpassまたはsudoyum installsshpassを使用してインストールできます。

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

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

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

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

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

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

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

タグLinuxハウツーSSH