SSHを使用してリモートサーバーでスクリプトを実行しようとすると、「ttyが存在せず、Askpassプログラムが指定されていません」というエラーが発生します。
エラーが発生する主なコマンドラインは次のとおりです。
sudo /usr/sbin/userdel $user_id
私のコマンドラインで修正する必要があるものを提案してください。
注:リモートサーバーではsudoersファイルを変更できません。
答え1
スクリプトを実行するには、リモート側にtty(ターミナル)を割り当てるためにssh
適切なオプションを渡す必要があります。-t
パスワードプロンプトを必要とするコマンド(例sudo
:)には端末が必要なため、入力時にパスワードが表示されないように入力した文字が出力されないように、端末I / Oを制御できます。
ssh $host
SSHクライアントは、実行時に(コマンドを使用せずに)自動的に端末を割り当てます(したがって必要ありません-t
)、次のコマンドで実行すると、ほとんどssh $host /path/to/script
のコマンドに対して端末ではないため、端末を割り当てません。標準ファイル記述子(stdin、stdout、stderr)をリダイレクトするだけで十分です。この-t
オプションは、その動作を変更してコマンドラインを渡しても端末を割り当てます。
文書を見る-t オプションSSHのマニュアルページから。そのページで pty または疑似端末への他の参照を探します。 (しかし、ターミナルはキーボード/モニターやシリアルポートなどの実際のデバイスに接続されていないため、ttyの代わりにpty / 擬似ターミナルと呼ばれます。この目的はほとんど同じ意味を持ちます。)