我正在尝试创建一个设置,人们可以通过“ssh”连接到本地主机上的特定端口,然后获取转发到远程服务器并进入 shell,无需输入凭据(不幸的是,密钥不是一个选项)。
到目前为止,我已经设置了 ssh 多路复用,ControlMaster
因此我可以从本地 shell 启动远程 ssh shell,而无需任何提示。
当新客户端连接到本地主机上的特定端口时,有没有办法使用该套接字?
我尝试了 和 的各种组合-D
,-R
但-S
都没有成功。在 Linux 或 Mac 上是否可以进行这样的设置?
编辑:
我不介意在任何时候输入本地主机凭据,但我试图避免在初始控制连接之后的所有连接中输入远程凭据。
localhost ----> localhost:2222 ----> remote:22
$ ssh -p 2222 forward to remote $ _ :)
using an existing
control socket
答案1
如果您想要一个基本的 shell,您可以使用它netcat
来创建一个在远程服务器上监听某个端口的 shell,并使用本地 ssh 上的端口转发来创建隧道:
在遥控器上:
while true ; do netcat -l -p 15000 -e /bin/bash ; done
在本地:
ssh -L 5000:remoteip:15000 user@server
netcat localhost 5000
你将无法使用某些命令(vim 行为是有趣的),但它适用于大多数命令。每次关闭连接时,循环都会产生一个新的连接。
答案2
您可以随时localhost:2222
localhost:22
使用 iptables 重新路由(转发),例如。
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-port 22
看别名端口/端口转发到另一个本地端口或这个谷歌搜索.此外ControlMaster auto
,不应该要求任何额外的密码(无论是本地还是远程)。
然而对我来说这似乎是不必要的并且让我怀疑您是否遇到了 XY 问题。