利用 ssh_config 使用本地私钥进行 ssh 隧道的单行命令
One-line command exploiting ssh_config for ssh tunneling with local private key
上下文
- work、proxy 和 service 是计算机。
- work 是一台多用户计算机。
- 我拥有 代理.
- work 位于限制 service 访问的防火墙后面,因为 service 入口点端口 ( 122) 被防火墙拦截。
- 我可以通过
ssh
proxy 访问然后访问 service.
priv.key
是连接到 service 的私钥,它只能在 work 上(不是 代理)。
firewall
+-------+ | +-------+ +---------+
| Work |--|--| proxy |----| service |
+-------+ | +-------+ +---------+
`-------------' `----------' <- port forwarding/ssh tunneling
解决方案 A:端口转发
我可以通过执行以下两个命令访问 服务:
ssh server -L 2222:service:122 -N
ssh -i /home/work-user/.ssh/priv.key -p 2222 service-user@localhost
此解决方案不安全且不方便:任何访问 work 的用户也可以访问 service:122
,并且有两个命令。
解决方案 B:ssh 隧道
我尝试利用 ssh_config
并使用以下内容配置 ssh 隧道:
Host service
HostName service
User service-user
Port 122
IdentityFile /home/work-user/.ssh/priv.key
ProxyCommand ssh proxy /usr/bin/nc %h %p 2>/dev/null
# "proxy" in the previous line is a working ssh alias.
然而,ssh service
命令没有成功,这里是日志:
debug1: Reading configuration data /home/work-user/.ssh/config
debug3: kex names ok: [*authorized algorithms*]
debug1: /home/work-user/.ssh/config line 54: Applying options for test
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/work-user/.ssh/config
debug3: kex names ok: [*authorized algorithms*]
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Executing proxy command: exec ssh proxy /usr/bin/nc service 122 2>/dev/null
debug1: permanently_drop_suid: 1000
debug1: identity file /home/work-user/.ssh/priv.key type 4
debug1: key_load_public: No such file or directory
debug1: identity file /home/work-user/.ssh/priv.key-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
ssh_exchange_identification: Connection closed by remote host
我也尝试在 proxy 上复制 priv.key
,只是为了测试,因为我不希望它成为永久解决方案,但我遇到了同样的错误。
问题
是否有使用 ssh_config
的单行命令来利用 ssh 隧道,同时将我的私钥保存在 work 而不是 proxy?
Is there a one-line command using ssh_config to exploit ssh-tunneling while keeping my private-key on work and not proxy?
使用 ProxyCommand
,始终从您的本地计算机而不是 proxy
进行身份验证。今天,您应该使用 -W
开关而不是 netcat
:
ProxyCommand ssh -W %h:%p proxy
或 ProxyJump
选项,这更简单:
ProxyJump proxy
您的用例确实将错误重定向到 /dev/null
因此即使有一些错误,您也不会看到它。
尝试上面的方法,如果没有帮助,请提供调试日志(使用 LogLevel DEBUG3
用于 both 步骤 -- 代理和服务).
上下文
- work、proxy 和 service 是计算机。
- work 是一台多用户计算机。
- 我拥有 代理.
- work 位于限制 service 访问的防火墙后面,因为 service 入口点端口 ( 122) 被防火墙拦截。
- 我可以通过
ssh
proxy 访问然后访问 service. priv.key
是连接到 service 的私钥,它只能在 work 上(不是 代理)。firewall +-------+ | +-------+ +---------+ | Work |--|--| proxy |----| service | +-------+ | +-------+ +---------+ `-------------' `----------' <- port forwarding/ssh tunneling
解决方案 A:端口转发
我可以通过执行以下两个命令访问 服务:
ssh server -L 2222:service:122 -N
ssh -i /home/work-user/.ssh/priv.key -p 2222 service-user@localhost
此解决方案不安全且不方便:任何访问 work 的用户也可以访问 service:122
,并且有两个命令。
解决方案 B:ssh 隧道
我尝试利用 ssh_config
并使用以下内容配置 ssh 隧道:
Host service
HostName service
User service-user
Port 122
IdentityFile /home/work-user/.ssh/priv.key
ProxyCommand ssh proxy /usr/bin/nc %h %p 2>/dev/null
# "proxy" in the previous line is a working ssh alias.
然而,ssh service
命令没有成功,这里是日志:
debug1: Reading configuration data /home/work-user/.ssh/config
debug3: kex names ok: [*authorized algorithms*]
debug1: /home/work-user/.ssh/config line 54: Applying options for test
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/work-user/.ssh/config
debug3: kex names ok: [*authorized algorithms*]
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Executing proxy command: exec ssh proxy /usr/bin/nc service 122 2>/dev/null
debug1: permanently_drop_suid: 1000
debug1: identity file /home/work-user/.ssh/priv.key type 4
debug1: key_load_public: No such file or directory
debug1: identity file /home/work-user/.ssh/priv.key-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
ssh_exchange_identification: Connection closed by remote host
我也尝试在 proxy 上复制 priv.key
,只是为了测试,因为我不希望它成为永久解决方案,但我遇到了同样的错误。
问题
是否有使用 ssh_config
的单行命令来利用 ssh 隧道,同时将我的私钥保存在 work 而不是 proxy?
Is there a one-line command using ssh_config to exploit ssh-tunneling while keeping my private-key on work and not proxy?
使用 ProxyCommand
,始终从您的本地计算机而不是 proxy
进行身份验证。今天,您应该使用 -W
开关而不是 netcat
:
ProxyCommand ssh -W %h:%p proxy
或 ProxyJump
选项,这更简单:
ProxyJump proxy
您的用例确实将错误重定向到 /dev/null
因此即使有一些错误,您也不会看到它。
尝试上面的方法,如果没有帮助,请提供调试日志(使用 LogLevel DEBUG3
用于 both 步骤 -- 代理和服务).