OpenSSH は SSH 設定ファイルを検索するときに $HOME を尊重しません

OpenSSH は SSH 設定ファイルを検索するときに $HOME を尊重しません

サーバー間の SSH 接続をテストする統合テストをいくつか書いています。

当面、テストは人々のラップトップから実行されます。ユーザー (テストを実行しているユーザー) の作業に支障をきたさないように、テスト専用~/.ssh/configのカスタム ファイルを含む一時ディレクトリを作成します./tmp/.ssh/config。次に、 をエクスポートしますHOME=/path/to/tmp。残念ながら、openssh は ssh 構成ファイルまたは ID ファイルの検索に を使用しないことがわかりました$HOME

ホストに直接 ssh する場合は、-Fフラグを使用して構成を明示的に設定できるため、問題ありません。ただし、要塞を介して ssh し、proxycommand がある場合は、sshその構成ファイルは proxycommand に渡されません。そのため、特注の ssh 構成で別のデフォルトのユーザー名 (例) が使用されている場合、その構成は proxycommand には使用されません。

proxycommand も変更 (ssh 構成ファイルを引数として受け取る) できますが、環境変数を使用するだけで、openssh が別の場所にある構成/ID ファイルを探すようにできるかどうか (構成ファイルを各後続のダウンストリーム コマンドに渡す必要がない) を知りたいです。 ssh-agent を使用して変更できるのでSSH_AUTH_SOCK、構成ファイルのディレクトリも変更できることを期待していました。

答え1

ソース コードによると、sshパスワード ファイルからホーム ディレクトリを取得し、成功しなかった場合は HOME 環境変数から取得します。

できることは、Include各ユーザーの~/.ssh/config、たとえばに を追加することです~/tmp/user/.ssh/config

インクルードするファイルが存在しない場合は、sshエラーは発生しません。ただし、ファイルが存在し、読み取り可能な場合は、そのファイルがインクルードされます。これにより、ファイルをあまりいじらずにテストを実行できるようになります。

セキュリティ上のリスクがあることに注意してください。これらのパスが適切に保護されていない場合、パスを知っている人は誰でも他のユーザーのローカル構成を挿入できるようになります。

関連情報