目前,我已经用Terraform在OTC中构建了一个小型数据中心环境。基于Ubuntu 20.04镜像。
这个想法是在设置阶段有一个跳转主机,用于操作目的,允许通过ssh代理跳转自发访问服务前端,而无需将它们永久路由到公共网络。
到目前为止,基本设置运行良好——我可以用ssh访问跳转主机,当我把私钥放在跳转主机上时,可以用ssh从那里访问内部机器。所以,从云的角度来看,安全似乎很好。密钥对是用ed25519生成的,我对跳转主机和内部服务器使用相同的密钥(目前(。
我无法实现的是代理跳转作为来自外部机器的链式命令。
在跳转主机上,我将AllowTcpForwarding设置为";是";在CCD_ 1中,并重新启动ssh和sshd服务。
我当前的本地ssh配置如下:
Host otc
User ubuntu
Hostname <FloatingIP-Address>
Port 22
StrictHostKeyChecking=no
UserKnownHostsFile=/dev/null
IdentityFile= ~/.ssh/ssh_access
ControlPath ~/.ssh/cm-%r@%h:%p
ControlMaster auto
ControlPersist 10m
Host 10.*
User ubuntu
Port 22
IdentityFile=~/.ssh/ssh_access
ProxyJump otc
StrictHostKeyChecking=no
UserKnownHostsFile=/dev/null
我可以使用这个ssh otc
到跳转主机。
我所期望的是,我可以使用例如ssh 10.0.0.56
来到达内部主机,而无需进一步的麻烦。同样,我应该能够使用像ssh -L 8080:10.0.0.56:8080 10.0.0.56 -N
这样的命令将内部服务器的端口映射到外部机器上的localhost端口。这就是我如何在公共云中的其他托管场景中成功地做到这一点。
我得到的只是:
Stdio forwarding request failed: Session open refused by peer
kex_exchange_identification: Connection closed by remote host
Jump主机上的期刊说:
Jul 30 07:19:04 dev-nc-o-bastion sshd[2176]: refused local port forward: originator 127.0.0.1 port 65535, target 10.0.0.56 port 22
我也检查了一下:
- ufw在跳转主机上关闭
- 用ProxyCommand替换了ProxyJump配置
所以我已经到了知识的尽头。有人暗示过还有什么原因吗?欢迎任何帮助!
好的,找到了原因(但尚未完全解释(。
我的本地ssh设置允许多路转发(ControlMaster auto
(,这导致在~/.ssh
中为Controlpath创建一个unix套接字文件。
我必须首先登录到AllowTcpForwarding
的跳转主机。重新启动sshd后,我返回到本地机器,在尝试转发到远程内部机器时发生了故障。
删除~/.ssh
中的套接字文件后,现在可以根据需要建立连接。显然,持久隧道没有受到跳转主机上重新启动的守护进程的影响,只是拒绝遵循新指令。
这花了我两天时间。好的一面是,我学到了很多关于ssh:o的知识