編集された質問に:

編集された質問に:

ソケットファイルがある場合、SSHは接続を再利用できます。ソケットを生成するには、次を使用します。

ssh -M -S /tmp/hello [email protected]

たとえば、このソケットファイルを使用してサーバー上でコマンドを実行するには、次のようにします。

ssh -S /tmp/hello example.com uname -a 

SSHは使用時にhostフィールドが必要-S /tmp/helloですが、関係ありません。以下は同じ効果があります。

ssh -S /tmp/hello whocares uname -a

SSHにホスト名が必要ですが、気にしないのはなぜですか?

SSHのこの動作(ソケットファイル()で説明されている接続を共有し、/tmp/helloすべての資格情報を無視する)は、私が望んで期待するものです。しかし、ホスト名が必要少し混乱しています。

問題は、次のようにこのコマンドを使用すると問題が発生することです。

ssh -S /path/to/my-first-host.socket example.com .... # expect connecting first host
ssh -S /path/to/my-second-host.socket example.com .... # expect connecting second host
ssh -S /path/to/my-third-host.socket example.com .... # expect connecting third host

ベストアンサー1

~/.ssh/configなどにより、SSH ホスト名に基づいて追加の構成を指定できます。/etc/ssh/ssh_configコントロールソケットを介して接続する場合、ホスト名自体は重要ではないかもしれませんが、該当する場合は次のオプションが適用されます。

$ cat ~/.ssh/config
Host foo
    LocalForward 8080 localhost:9000
$ ssh -fMS /tmp/hello localhost sleep 1d
muru@localhost's password:
$ ssh -fS /tmp/hello foo sleep 1d & sudo lsof -i :8080
[1] 6971
[sudo] password for muru:
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh     6859 muru    8u  IPv6 148286      0t0  TCP ip6-localhost:http-alt (LISTEN)
ssh     6859 muru    9u  IPv4 148287      0t0  TCP localhost:http-alt (LISTEN)

~/.ssh/config明らかに、SSHは制御ソケットを使用しても私が指定したポート転送ルールを適用します。実際、ポート転送はソケットを作成するプロセスによって行われます。

$ pgrep -fa hello
6859 ssh -fMS /tmp/hello localhost sleep 1d
6971 ssh -fS /tmp/hello foo sleep 1d

おすすめ記事