SSH通过中心登陆服务器直接连接外围服务器

SSH通过中心登陆服务器直接连接外围服务器

我遇到过这样的情况:我可以连接到服务器 A(“登陆服务器”),而服务器 A 可以连接到服务器 B(“外围服务器”)。我无法直接访问服务器 B。

目前,我 ssh 到 A,然后从那里 ssh 到 B。我为此创建了一个 ssh 配置,如下所示:

Host B
    Hostname <A-hostname>
    User <A-user>
    RequestTTY yes
    RemoteCommand ssh <B-user>@<B-hostname>

这在交互工作时有效,但在 scp 等情况下无法正确工作。运行ssh -J A B结果为B: Permission denied (publickey)。我无法将我的公钥添加到 B。

我怎样才能让它工作?

编辑:基本上,我想要实现的是:使用我的私钥创建与 A 的连接,然后使用 A 的私钥创建与 B 的连接,理想情况下,scp 等可以正确使用所有这些方法。

答案1

这不适用于 scp 等,因为您的 RemoteCommand 不会保留原来的发送给“B”的命令,这就是服务器端 scp 进程的启动方式。

如果服务器 A 正在运行 OpenSSH,则您的 RemoteCommand 需要运行一个脚本,将的内容传递$SSH_ORIGINAL_COMMANDssh B命令 - 以及根据脚本本身是否具有 tty动态添加-t或。-T

(请注意,始终请求 tty 可能会导致非交互式传输期间数据损坏;scp/sftp 假设通道干净,并且不期望 TTY 层对某些字节进行特殊处理。如果 scpssh -T再次明确禁用 tty 请求,那应该没问题 - 只要 RemoteCommand 将其转移到下一个连接。)

相关内容