修正済み: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ターミナルエミュレータを探している可能性があります。これをテストするには、エラーを再現してみてください。例として機能するように仮想マシンを構成し、実行しました sshuser@linuxtest.example「sudo / var / mail / startup.sh」 テストとして。当然、コマンドとsshの行を自分がやろうとしていることに一致するものに変更する必要があります。



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

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



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

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

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

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

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

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

読んだ3分