ssh B
我可以通过SSH 从本地计算机 A 登录跳转主机服务器 B。
服务器 C 只能寻址(地址为 C.internal)并且可以通过 B 从服务器 C 进行访问ssh C
。
如何直接从本地计算机通过 SSH 连接到 C?
SSH 命令和配置文件是什么样的?
A 上的 ssh 配置:
Host B
User userB
HostName B.example.com
IdentityFile ~/.ssh/keyB
B 上的 ssh 配置:
Host C
HostName C.internal
User userC
IdentityFile ~/.ssh/keyC
是否可以在不~/.ssh/keyC
从主机 B 复制到本地计算机 A 的情况下执行此操作?
您需要一个 ssh_config 文件,例如 global
/etc/ssh/ssh_config
或 as user~/.ssh/config
:现在,从
A
,您可以ssh
C
。有几个选项,但没有一个是“单一命令”:
您可以向 B 运行一个 SSH 命令,然后只向 C 运行第二个 SSH 命令;您需要添加
-t
选项以使其适用于交互式 SSH:ssh -t hostB "ssh hostC"
ssh -t hostB "ssh -t hostC htop"
ssh hostB ssh hostC ls -la /etc
如果您想要一种从 A“直接”通过 SSH 到 C 的方法,您将需要一些额外的装置来将 ssh 代理连接从 B
ssh -A
转发到本地系统(即与通常情况相反)。通过 SSH 连接到主机 B,然后在手动指定的路径启动 ssh-agent。使用 SSH“流转发”功能允许本地客户端访问远程代理进程:
(ssh/config 选项是
LocalForward
。)只要上述连接正在运行,您就可以使用常规 ProxyJump 配置从 HostA 连接到 HostC,并使用仅存在于 HostB 上的密钥:
(ssh/config 选项是
IdentityAgent
和ProxyJump
。)keyC
另一种选择是从 B复制到 A 并将其存储在安全硬件上,例如 TPM 芯片或智能卡(具有 PIV 模式的 Yubikey 也可以)。这允许在机器 A 上本地使用密钥,而不会被盗。(对于 Linux 上的 TPM2.0,您可以选择
tpm2-pkcs11
或ssh-tpm-agent
;Windows 上的 TPM2.0 可以通过 PuTTY-CAC 使用。对于带有 PIV 的 Yubikey,有适用于 Windows 和 Linux 的 PKCS#11 模块。我正在使用来自 Ebay 的 eToken 5110。还有一种方法可以通过 SSH 使用 FIDO2 密钥,但需要生成新密钥。)