我遇到过这样的情况:我可以连接到服务器 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_COMMAND
给ssh B
命令 - 以及根据脚本本身是否具有 tty动态添加-t
或。-T
(请注意,始终请求 tty 可能会导致非交互式传输期间数据损坏;scp/sftp 假设通道干净,并且不期望 TTY 层对某些字节进行特殊处理。如果 scpssh -T
再次明确禁用 tty 请求,那应该没问题 - 只要 RemoteCommand 将其转移到下一个连接。)