我试图在路由器后面的一台机器上生成SSH服务器。
首先,我尝试将SSH绑定到我的公共IP地址:
ssh -R 10002:localhost:22 <ip_address>
然后我被要求输入密码,但我的用户名和密码似乎不起作用。
显然我知道我的用户名和密码,所以我认为它正在尝试在同一网络下的另一台计算机上进行身份验证。
有什么建议如何解决这个问题吗?
如果您没有访问路由器,则任何关于如何在路由器后面创建SSH服务器的替代方法都会对我有所帮助。
iptables中的端口都是开放的。
更新
根据Thomas Oster的建议,我尝试了以下操作。
在路由器后面的计算机上执行了以下命令:
$ ssh -R10002:localhost:22 <remote_public_ip_address> -l <my_remote_server_username>
<remote_ip_address>
是具有公共IP和SSH服务器并且我拥有完全控制权的远程服务器的 remote_ip_address。
<my_remote_server_username>
是远程服务器的用户名。
之后,我尝试通过以下方式从远程服务器连接到路由器后面的服务器:
$ ssh -p 10002 <remote_public_ip_address>
但是这个命令显示以下输出:
ssh: connect to host <remote_public_ip_address> port 10002: Connection refused
所以我使用以下命令在iptables防火墙中打开了10002端口:
sudo iptables -A INPUT -p tcp --dport 10002 -j ACCEPT
之后我再次执行了命令,但显示相同的错误信息。
在我的路由器后面的机器上,我已经在iptables中打开了所有端口。
更新2
您需要在remove_public_ip_address服务器的/etc/ssh/sshd_config文件中允许端口转发
我尝试在sshd_config文件中添加此命令以允许端口转发:
LocalForward 10002 <my_remote_public_server_ip>:22
但它给了我这个错误信息:
Bad configuration option: LocalForward
在执行完"ssh -R...."命令后,你有没有保持窗口打开?
执行该命令后,它会连接到远程公共机器,是的,我保持了窗口打开。
在创建隧道后,你能否在公共服务器上使用ssh -p 10002 localhost?
是的,如果我在公共服务器上执行该命令,在询问我的凭据后它会连接成功。
请尝试在路由器后面的机器上运行“ssh localhost”以检查sshd是否正在运行和工作。
这也可以正常工作。
更新3
最后我终于能够使它工作了(再次感谢Thomas Oster)
我们将使用三台机器:
目标机器:我们想要连接的机器。
中间机器:用于连接的中介服务器(在我的情况下为Linode)。
家庭电脑:我们将访问目标机器的地方。
以下是我遵循的步骤
第1步:
[destination computer]$ vi /etc/ssh/sshd_config
添加GatewayPorts选项:
GatewayPorts yes
重新启动ssh。
第二步:
[destination computer]$ ssh -R 4040:localhost:22 middle-machine-user@middle-machine-public-ip
这将通过4040端口将您的公共机器与目标计算机连接。
它将连接到中间机器并提示终端,您必须保留此选项卡打开。
第三步:
从家里进行连接:
ssh destination-user@destination-ip -p4040
或者从中间机器连接:
[home computer]$ ssh middle-machine-user@middle-machine-ip
[middle computer]$ ssh destination-user@localhost -p4040
ssh destination-user@middle-ip -p4040
。 - Slipp D. Thompson