修正済み:sudo:ttyが存在せず、askpassプログラムが指定されていない

no tty presentおよびno a​​skpassプログラム指定の出力行は、問題の原因のポイントに実際には到達しないため、実際にはそれほど役に立たないsshエラーメッセージの1つです。おそらく、メッセージが表示されたときに実際に何らかの有効なTTYを使用していて、sshを介してsudoパスワードを入力することに問題なく対処している可能性があります。あなたはおそらく構文の間違いを扱っているでしょうが、メッセージはこの事実に直接対処していません。

これはssh自体に関連する問題であるため、Linux、FreeBSD、macOS、およびMicrosoftWindows上のCygwinのUnixサービスで問題を再現できる可能性が高くなります。幸い、修正はこれらすべてのプラットフォームでほぼ同じであるはずです。

方法1:sshのターミナルを見つける

あなたはすでにターミナルから作業している可能性が高いですが、sshはおそらくこれを認識していません。コマンドプロンプトウィンドウ内にいるにもかかわらず、TTYターミナルエミュレータを探している可能性があります。これをテストするには、エラーを再現してみてください。例として機能するように仮想マシンを構成し、テストとしてssh [email protected]'sudo/var/mail/startup.sh 'を実行しました。当然、コマンドとsshの行を自分がやろうとしていることに一致するものに変更する必要があります。

自分が思っていたサーバーにログインしていることを確認する必要があります。とにかく、まだsudoが表示されるかどうかを確認してください:ttyが存在せず、askpassプログラムで指定されたエラーメッセージがありません。おそらく、まだ受信している場合は3回表示され、DebianまたはUbuntuでローカルにsudoを実行している場合と同じようにパスワードの入力を求められることもあります。

構文エラーを修正するには、sshの後に-tを追加してみてください。これにより、10回のうち9回、sshは仮想TTYをそれ自体に割り当て、実際の端末内で実行されているように見せかけます。コマンドについて他に何も変更する必要はありません。文字sshの後に-tオプションを追加し、ホストと渡されたコマンドを同じに保つだけです。コマンドの後半でsshを実行する必要がある場合も、このことを覚えておく必要があります。

たとえば、ssh -t [email protected]'ssh [email protected] 'としてフォーマットされたコマンドを実行しているときにこれと同じ種類のエラーが発生した場合は、最初のsshの後に-tオプションを保持する必要があります。それを防ぎます。後で2番目のコマンドを変更してデータを生成または消費する場合は、-tをまったく使用しないことに注意してください。たとえば、スクリプトの代わりにcatの実行を開始した場合、そのための端末を割り当てる必要がないため、-tをダンプできます。

方法2:visudoファイルにパッチを適用する

このエラーを引き起こす構成の問題がある場合もあります。sudo visudoコマンドを発行してvisudoファイルを変更します。また、このファイルを他の方法で編集する必要はないことに注意してください。ALL = NOPASSWDを特徴とする行の後に、実行するために管理者のパスワードを入力する必要のない種類のコマンドが続くはずです。

行の最後のコマンドを除いて、個々のコマンドはコンマで終了する必要があります。したがって、/ sbin / poweroff / sbin / start / sbin / stopのようなものがある場合は、これらすべてを1つのコマンドとして扱い、エラーをスローします。同様に、ssh経由で実行しようとしているコマンドが欠落している場合は、このエラーも発生します。エラーがまだ再現可能かどうかを確認する前に、必要な調整を行い、ファイルを保存してください。

サービスを再起動してもエラーが発生する場合は、下の画像で次のコマンドを試し  て、PermitTTY行の後にyesという単語が含まれていることを確認してください。これがファイルの最後の行である場合は、後で空白の改行があることを確認してください。GNU nanoは、デフォルトでこのタスクを自動的に実行します。

エラーメッセージを再度再現する前に、関連するサービスを再起動する必要があります。