【解決済み】「stdinは端末ではないため、疑似端末は割り当てられません」エラーの対処法
多くの場合、「疑似端末(pseudo-terminal)は割り当てられません。stdinが端末ではないため」という紛らわしいエラーは、スクリプトからSSHコマンドを実行したときにのみ発生します。同じコマンドをコマンドラインから直接実行すれば、問題なく動作することも少なくありません。
作業を始める前に、まず公開鍵がSSHエージェントに登録されているか確認し、その上で再度sshコマンドを実行してみてください。単に鍵が不足していたというケースもよくあります。それでも解決しない場合は、スクリプト側のトラブルシューティングが必要になります。
方法1:疑似TTYの強制割り当てと無効化
コマンドラインオプションを組み合わせることで、この問題を素早く解決できる場合があります。疑似端末の割り当てを強制するには、ssh -t -t -R のように-tオプションを重ねて指定し、続けて接続先を指定します。例えば、ssh -p 80 appuals@ssh.example.com でexample.com(本記事用の架空のホスト名です)にログインしようとしていたとしましょう。
代わりに ssh -t -t -R -p 80 appuals@ssh.example.com を実行して、問題が解決するか確認してください。実際にログインする際は、アカウント名とホスト名をご自身の環境に合わせて置き換える必要があります。-tオプションにより端末の割り当てが強制されるため、「stdinは端末ではないため、疑似端末は割り当てられません」というエラーは表示されなくなるはずです。
ただし、場合によってはエラーメッセージが延々と出力され続けることもあります。これを面白がるユーザーもいるようですが…。
いずれにせよストレスが溜まるものですので、Ctrl+Cでプロセスを終了させましょう。
-tスイッチを1つだけにするか、逆に数を増やしてみるのも有効です。それでもうまくいかない場合は、-tスイッチを-Tスイッチに置き換えて、例えば ssh -T -R -p 80 appuals@ssh.example.com のように実行してみてください。
-Tオプションは疑似端末の割り当てプロセス自体を無効化します。強制しても解決しないケースでは、こちらが有効なことがあります。もちろんコマンドラインから直接実行する分にはどちらも問題になりませんが、スクリプト内でどのオプションが機能したのかをメモしておけば、今後同じサーバーへアクセスするスクリプトを作成する際に役立ちます。
sshコマンドでは、この正反対の働きを持つ2つのオプションに似た名前が付けられている点に注意してください。-tは疑似端末の割り当てを強制し、-Tは無効化します。これらのオプションは大文字・小文字が区別されます。sshは従来型のTTY端末を必要とするため、スクリプト内ではしばしば必須となります。通常の操作では、お使いのターミナルエミュレータがその役割を担っています。
方法2:sshpassを使用する
スクリプトによっては、sshpassコマンドを使った方がうまく動作することがあります。sshpassはデフォルトではインストールされていないため、試してみたい場合や特定の用途で必要な場合は、sudo apt-get install sshpass または sudo yum install sshpass でインストールできます。
現時点で使用していないのであれば、おそらく必要ないでしょう。とはいえ、同様のテクニックを使えば、この種の環境でも疑似端末割り当てに関するエラーメッセージを回避できます。
例えば、sshpass -p パスワード ssh -T appuals@ssh.example.com のように実行すれば、スクリプト内部からでも正常に動作させられます。
方法3:ジョブ管理エラーの修正
ここまでの対処を行った後でも、別のエラーメッセージが表示されることがあります。「no access to tty(TTYにアクセスできません)」という警告が表示され、さらに「このシェルにはジョブ制御がありません」という注意が続く場合でも、ある程度は通常通り作業を続行できるはずです。
このエラーは、リモートサーバー側のcsh、tcsh、Almquistシェルなどの設定に何らかの不具合があることが原因です。他のエラーメッセージに気を取られていて気づかなかったかもしれませんが、疑似端末に関するエラーが他に表示されていないのであれば、普段とほぼ同じように作業を続けられます。
ただし、この状況ではCtrl+Zでプロセスを一時停止しない方が賢明です。停止したプロセスを再開する手段がない可能性があるためです。終了時に「there are stopped jobs(停止中のジョブがあります)」というエラーが表示される場合は、ログアウトが許可されません。
作業内容の消失を許容できるのであれば、psコマンドとkillコマンドを使って終了できないジョブを強制的に終了させましょう。そうすればログアウトできるようになります。
-
PCがSDカードを認識しない原因と対処法|ドライバー更新からBIOS設定まで完全ガイド
パソコンにSDカードを挿入しても認識されない——そんな経験はありませんか?この問題の多くは、古い・破損した・互換性のないドライバーやハードウェアの不具合が原因です。内蔵SDカードリーダーでもUSB接続のカードリーダーでも同様の症状が発生する場合、ソフトウェア側の問題である可能性が高いといえます。 まず確認したいのは、SDカード自体が正常かどうかです。別のPCでSDカードを読み込んでみて、そちらで問題なく動作するのであれば、原因はあなたのPC側にあると特定できます。 SDHCカードが読み込めない場合は要注意 もう一つ見落とされがちなポイントがあります。1GBや2GBのSDカードは認識されるのに、
-
【Windows 10】「時間データが利用できないため、コンピュータは再同期しませんでした」エラーの解決方法
システム時刻を正確に保つためには、定期的に外部のNTP(Network Time Protocol)サーバーと同期させるのが一般的です。しかし、時刻を同期しようとした際に「時間データが利用できないため、コンピュータは再同期しませんでした」というエラーが表示されることがあります。このエラーは、他の時刻ソースとの同期を試みたときによく発生するもので、放置するとファイルの破損やタイムスタンプの不整合など、さまざまな問題につながる可能性があります。この記事では、Windows PCでこのエラーを解決するための方法を詳しく解説します。 Windows 10で「時間データが利用できないため再同期しない」