基于密钥文件的 SSH 代理

基于密钥文件的 SSH 代理

好的,我正在寻找一种方法,根据用于连接到服务器的 ID 文件,将多个 ssh 从单个公共 IP 地址和单个端口处理到多个服务器。我考虑过使用 ~/.bashrc 来运行到服务器私有 IP 的 ssh 连接,但这是我唯一的想法。很难找到任何相关信息,因为使用 SSH 和代理搜索任何内容都会以正向或反向代理问题结束。

最好的情况

user@publicip -i user1 --- proxy to [email protected]
user@publicip -i user2 --- proxy to [email protected]

我认为我可以使用 ~/.bashrc 来完成这项工作

user1@publicip -i user1 --- proxy to [email protected]
user2@publicip -i user2 --- proxy to [email protected]

谢谢你!

答案1

欢迎来到 Unix 和 Linux StackExchange!

我假设你的意思是“单个公共IP地址和一个公共IP地址”入境/目的地港口”。

在这种情况下,您的搜索可能走得太远了,因为答案可能一直就在您的指尖:sshd(8) 手册页中的 AUTHORIZED_KEYS 文件格式章节我相信,它将为您提供您正在寻找的工具。

~/.ssh/authorized_keys的 文件中user@publicip,您可以指定每当使用特定键时要运行的命令而不是普通会话。所以你可以这样做:

command="ssh [email protected]",restrict,pty ssh-rsa <public key of user1>
command="ssh [email protected]",restrict,pty ssh-ed25519 <public key of user2>

有了这个authorized_keys文件,如果使用user1的私钥来验证user@publicipsshd将立即运行ssh [email protected] 而不是用户的常规 shell。当与 192.168.1.10 的 SSH 连接结束时,整个会话将结束。而如果改用user2的私钥,则会[email protected]分别连接。

但是,如果我的假设不正确,并且您确实希望将代理的出站端限制为单个源端口,有一个小问题需要编写您自己的 TCP 协议的自定义实现,并修改 SSH 的版本以在其上运行。

相关内容