利用 ssh_config 使用本地私钥进行 ssh 隧道的单行命令

One-line command exploiting ssh_config for ssh tunneling with local private key

上下文


解决方案 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 步骤 -- 代理和服务).