ソケットファイルがある場合、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