我基本上做过两次相同的 ssh -R 转发,但只有一个能用。以下是我的情况:
在工作中:我想要远程登录的服务器/计算机
在家:台式电脑 笔记本电脑
路由器转发:端口 22 和 49666 到笔记本电脑端口 49667 和 49668 到台式机
出于某种原因,公司的 IT 部门希望我在计算机上使用 ssh -R,而不是正常打开端口(我猜他们担心如果让端口保持打开状态会带来安全问题)。他们允许我这样做是一个很大的让步,我不想再就正常打开端口的问题与他们争论了。所以我在工作中这样做
ssh -R 49666:localhost:22 (home IP) -N #this is for the laptop
然后,在我的笔记本电脑上,我可以执行以下操作:
ssh localhost -p 49666
我成功进入工作电脑。
在工作中,我也会做:
ssh -R 49668:localhost:49667 (home IP) -N #this is for the desktop
但是在我的桌面上,如果我尝试
ssh localhost -p 49667
我得到:
ssh: connect to host localhost port 49668: Connection refused
这些命令基本上是类似的,所以我不确定为什么一个有效而另一个无效。我的第一个想法是,由于默认的 ssh 端口是 22,所以我的桌面没有监听 49667。所以我进入 /etc/ssh/sshd_config 并将其更改为监听 49667,但我仍然收到相同的错误。
如果我在办公室电脑前输入:
ssh (home IP) -p 22
我成功登录笔记本电脑。同样,如果我输入
ssh (home IP) -p 49667
我成功登录桌面。因此,我认为这不是桌面上的安全问题,因为我可以从工作服务器进入桌面。
我的第二个想法是,在 ssh -R 命令中,(家庭 IP)部分试图转到家庭 IP 的端口 22,因为工作计算机在默认端口 22 上有 ssh,并且它不知道我将目标计算机设置为查看端口 49667。所以我的下一次尝试是这样的
我进入工作电脑上的 ~/.ssh/config 并输入如下一行:
host Desktop
hostname (home ip)
port 49667
现在,如果我打开办公电脑并输入
ssh Desktop
它成功登录到桌面,因为它与上面的命令基本相同:
ssh (home IP) -p 49667
因此,我尝试在工作电脑上执行此 ssh -R 行:
ssh -R 49668:localhost:49667 Desktop -N
现在,当我尝试从家里的桌面通过 ssh 进入服务器时,出现以下错误:
ssh_exchange_identification: Connection closed by remote host
这与我之前遇到的故障不同(连接被拒绝,我认为这只是意味着根本没有端口转发)。此外,当我遇到上述故障时,工作服务器上会弹出此故障(我知道,因为我正在用笔记本电脑查看它)
connect_to localhost port 49667: failed.
因此,在这种情况下我得到了一些不同的反应,但仍然没有成功。而且我没有主意了……
所有 3 台计算机(工作计算机、笔记本电脑、台式机)每台都有正确的公钥。
答案1
我想我是在发布问题 15 分钟后才找到答案的,所以我会发布我的解决方案,以防其他人遇到类似的问题……以下命令对我有用
ssh -R 49668:localhost:22 Desktop -N
出于某种原因,我认为第二个端口号(在本例中为 22)应该是目标计算机(配置文件“桌面”下的 IP)监听 ssh 的端口。但这有效,所以我错了。也许它应该是执行 ssh -R 命令的计算机中监听 ssh 的端口?