OpenSSH sshのControlPathオプションで単に%hを使用するとどうなりますか?

OpenSSH sshのControlPathオプションで単に%hを使用するとどうなりますか?

「ssh_config(5)」のマニュアルページで、ControlPathオプションに少なくとも%h%pおよび%rプレースホルダを含める必要があることを示唆しているのはなぜですか?一意に識別します。共有接続あたり?

私の考えでは、会議が何度もあるはずです。共有する同じホストの同じソケットに接続します。したがって、次のような単純な定義を持つことは妥当ではないでしょうか?

ControlPath ~/.cache/ssh/mux/%h

次のようなものの代わりに:

ControlPath ~/.cache/ssh/mux/%r@%h:%p

最初の定義を理解すると、同じリモートホストの異なるリモートポート上の異なるリモートユーザーの複数のセッション間で接続が共有されます。

私はホストのデフォルトセクションに最初の定義をしたいと思います。それで十分でしょうssh -o ControlMaster=no

リモートユーザーとリモートポートに関係なく、同じローカルユーザーが開始したすべてのセッション間で同じリモートホストへの接続を共有したいと思います。マスタークライアントのソケットは、ローカルユーザーのホームディレクトリに配置する必要があります。

答え1

「複数のセッションが同じソケットを共有し、同じホストに接続する必要があると思います。」

彼らはできる。ただし、既存の接続を介してホストに接続している場合は、ControlPathどのユーザーとしてログインしても、その接続の元のユーザーとしてログインします。たとえば、「どこか」への接続が確立されていません。

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=yes bob@somewhere

今回の会議はbob@somewhereです。

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=no sue@somewhere

今回の会議は返品はいbob@somewhereは同じControlPathを使用して設定したためですControlMaster=no。その場合、ControlMaster=yessueとしてログインしますが、sshは次のようにControlPathパラメータを無視しますman ssh_config

他のセッションがこのソケットに接続できます。同じControlPathを使用ControlMasterが「いいえ」に設定されています

証拠として、どちらの場合も、bobが終了したときにControlMaster=yes「sue」セッションがまだ実行されていても、ControlPathソケットが消えた場合、つまり~/.ssh/somewhereソケットはsueセッションで使用されていません。

したがって、同じ接続を使用したい場合はそう%hすることができますが、注意してください。複数の他のリモートユーザーと接続を共有することはできません。- sshはこれを許可しません。

答え2

同じサーバーでも、複数のユーザーと複数のポートを使用できます。私自身は企業のイントラネットにある何百ものシステムに接続しています。 userAへのアクセスはuserBへのアクセスとは大きく異なり、デフォルトの接続も異なる必要があります。より簡潔に実行するには:

$ ssh -n -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userA localhost sleep 10 & # create the master connection and background it
$ ssh -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userB localhost whoami
userA

ご覧のとおり、ユーザーBとのOpenSSHセッションではなく、ユーザーAとの元のセッションを取得します。これは、ホームディレクトリ、権限、認証自体も期待したものとは異なることを意味します。この機能を使用すると、userBのディレクトリにあるファイルを削除しようとすると、a)無効なファイルになる可能性があり、b)無効な権限がある可能性があります。

やる意思があればいいえ単一のポートを使用して 1 台のサーバーから複数のユーザーに接続するだけで%h十分です。ファイルで次の~/.ssh/configものを使用する必要があります。

ControlMaster=auto  # use existing or create a master connection
ControlPath=~/.cache/ssh/mux/%h
ControlPersist=yes

このControlPersistオプションを使用すると、デフォルトの接続が終了または終了するまでバックグラウンドで開いたままになりますssh -O exit。これは「設定して忘れてしまう」素晴らしい機能です。

しかし、もしあればどの1つのホストから複数のユーザーに接続できる場合は、より安全なものが必要になります。

ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes

関連情報