ユーザーの対話なしで実行する必要があるスクリプトがあり、いくつかのSSHポート転送を設定する必要があります。パスワードの入力を求められないでください。 SSHから続行するには、パスワードが必要な場合はスクリプトにエラーが発生するようにしたいと思います。
接続を試みる前に、SSHエージェントが特定のホストに接続するように正しく設定されていることをSSHに通知する方法はありますか?
答え1
sshには、パスワードを求めるのではなく、単に失敗させる「BatchMode」オプションがあります。これは、スクリプトがパスワードを要求するかどうかを予測するよりもはるかに簡単に見えます。一つスーパーユーザーに関する同様の質問に答えるさまざまな対話型認証タイプがあるため、PasswordAuthenticationを無効にすることは常に機能するわけではなく、キーのパスワードを求めるプロンプトを表示できないようです。
を使用するssh -o BatchMode=yes
か、ホストのssh_configに入れることができます。
また、制御端末がないと、sshはパスワードの入力を求めません(エラーが発生します)。 Do this特別にsshコマンドを使用して制御ttyなしでプロセスを開始できます(これにより、パスワードなどの入力を求めるメッセージread_passphrase: can't open /dev/tty: No such device or address
もsetsid
表示されません。sudo
)
プロセスを実行するとsetsid
バックグラウンドで自動的に実行されるため(シェルには他のセッションのプロセスに対するジョブ制御がないため)、stdout / stderrをログファイル(および標準)にリダイレクトして準備する必要があります。 /dev/null に入力)。実行中のプログラムがsetsid
標準入力から何かを読み取ろうとすると、バックグラウンドプロセスが端末を読み取らないようにする一般的なメカニズムが機能しないため、奇妙な結果が生じる可能性があります。
答え2
実際に試してみないと動作するかどうかはわかりません。間違っている可能性がたくさんあります。
あなたの場合ssh_configマニュアルページに「No」に設定できる「PasswordAuthentication」オプションがあることがわかります。見ているSSHマニュアルページには、プログラムに設定オプションを送信するために使用できる「-o」オプションがあることがわかります。
だから、これを使ってPasswordAuthenticationをオフにして欲しいものを手に入れることができると思います。