SSH構成ファイルで変数を使用する方法

SSH構成ファイルで変数を使用する方法

SSH設定ファイルを$HOME置き換えるために使用したいと思います。/Users/Me

Host MyHost
    HostName 192.168.1.1
    IdentitiesOnly yes
    User me
    IdentityFile "/Users/Me/.ssh/id_rsa"

しかし、私は得た。no such identity: $HOME/.ssh/id_rsa: No such file or directory

答え1

少なくとも私のDebian 10システムでは、ssh_config(5)マニュアルページに次のように表示されます。

議論身分証明書チルダ構文を使用して、ユーザーのホームディレクトリまたはTOKENSセクションで説明されているトークンを参照できます。

したがって、次のように行を作成$HOMEできます。IdentityFile

IdentityFile "~/.ssh/id_rsa"

または次のように:

IdentityFile "%d/.ssh/id_rsa"

環境変数構文(${HOME})のサポートは構成項目でのみ言及されており、記載されていIdentityAgentませんIdentityFileOpenSSHリリースノートCertificateFile環境変数構文サポートと設定キーワードがOpenSSHバージョン8.4(2020-09-27にリリース)に追加されましたControlPathIdentityFileDebian 10にはバージョン7.9のみがあります(最新のセキュリティ修正としてバックポートされています)。

したがって、この記事を書いている時点で非常に新しいLinuxディストリビューションを使用しない限り、OpenSSHバージョンは${HOME}SSH設定ファイルの構文の使用をサポートするには古すぎるかもしれません。

答え2

SSH 構成ファイルの一部のキーワードは環境変数をサポートしますが、ほとんどはサポートしません。幸いなことに、IndentyFileはその一つです。

ファイルで${HOME}代わりに使用する必要があります。$HOME

tokensたとえば、を使用してホームディレクトリを参照することもできます%d。これはによって文書化されましたman ssh_config

答え3

-F追加するには、sshオプション(カスタム設定ファイル)を使用してさらに2つの操作を実行できます。特に、これらの変数は古く、広く使用されているCentOS 7では動作しないためです。これは、ノードにホームディレクトリがない場合に重要です(ただし、$ HOMEは存在しない場所を指します)。たとえば、HTCondorクラスタでは、$_CONDOR_SCRATCH_DIRは$ HOMEではなくユーザーの家です。など。

ファイルパスは相対パスである可能性があるため、目的のディレクトリcdに移動して相対パスを使用してください。

ssh -F relative_ssh.config servername

二つ目は活用範囲を拡大することです。envsubst

FOO=1 BAR=2 envsubst < in_file > out_file

ただし、多くのSingularityコンテナと同様に、このコマンドはssh単純なシステム(yum/apt-get install utils-linuxまたはyum/apt-get updateSingularityビルド)には存在しません。

最後に、PSAはSSHキーと設定をリモートサーバー/クラスタ/コンピュータに保存するのは危険です。ボリュームがマウントされているコンピュータに誰もsudo権限を持っていないと100%確信していない限り、共有スペースに置かないでください。 OBfuScAt1onは役に立つかもしれませんが(たとえば、誰も名前の付いたフォルダを見ない)、実際には(ベアボーンに存在する)crash-dump-Aug23タールボールを暗号化するために使用されます。openssl

関連情報