ssh: 连接到主机myremotehost.com端口22被拒绝连接

所以我正在尝试在我的服务器上启用SSH。我可以使用服务器的本地IP地址在本地网络上连接得很好。但是当我尝试远程连接(通过我为服务器设置的域名,我知道它是有效的),我遇到了连接被拒绝的错误。
ssh: connect to host bahhudson.mine.nu port 22: Connection refused

从我对这个问题的研究来看,似乎我的路由器出了一些问题。我已经配置了端口转发,但这是唯一可能导致"连接被拒绝"错误的原因...我的路由器是WRT120N型号,我根据Portforward.com进行了配置,但这个网站似乎有点过时,因为其中一些图片与我的路由器设置不完全相同。不过,我尝试了多种方式来设置端口转发,并且我知道端口80的转发是有效的,因为我的服务器可以通过HTTP访问。
此外,我认为VPN访问也被类似的方式阻止了,所以解决SSH端口22被阻止的方法可能与解决VPN被阻止的方法类似。
有什么想法吗?
谢谢!
10个回答

只是分享一下。 (可能有不同的配置)
在我的情况下,我发现这个错误可能是因为我没有在另一台机器上安装openssh-server。
在我在另一台机器上安装了openssh-server之后,问题解决了。
ssh: connect to host 192.168.XXX.XXX port 22: Connection refused

问题已解决。

1忘记这个似乎很傻,但这正是我的情况!在尝试其他诀窍之前,这个答案应该是首选考虑的。 - Garini
和我情况一样。我在我的主机电脑上没有安装ssh服务(sudo apt install openssh-server)。一旦安装了,ssh-copy-id -i id_rsa.pub user@172.17.0.1 没有报错。我是通过ssh将ssh密钥从Docker容器所托管的主机复制到主机上的。 - yogender

首先检查系统中是否安装了 openssh-server
检查ssh服务状态,启动ssh服务。
sudo service ssh status sudo service ssh start
检查该系统的22端口是否被iptables阻塞。只需在iptables中允许端口,然后进行检查。
sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
否则,通过编辑将ssh的端口号从22更改为2222。
vi /etc/ssh/sshd_config /etc/init.d/ssh restart.

谢谢!对我有用!这应该是被接受的解决方案! - Qazi Fahim Farhan
在我的情况下,启动服务时SSH出现故障。这个错误的输出是:sshd: no hostkeys available -- exiting,修复方法是:ssh-keygen -A - Garini

您的互联网服务提供商可能会阻止对22号端口的连接(无论您或您的路由器如何都无法解决)。只需将SSHd设置为在不同的端口上运行,例如2222。
在/etc/ssh/sshd_config中,将Port 22更改为Port 2222,然后执行sudo service ssh restart。将2222(或其他端口)进行端口转发,然后再次尝试连接。

我仍然遇到相同的连接拒绝错误(当我在使用ssh时没有指定端口时为22,当我使用-p 222时为2222)。我将传入端口22转发到2222,并在sshd_config中更改了端口为2222。我有什么遗漏吗? - bahudso
1试试这个:Incoming 2222 在路由器上必须转发到 2222(在 sshd_config 中设置了端口 2222)。 - ish
@izx 太棒了,对于路由器规则的处理真是赞!有时候我都觉得自己要疯了,不知道自己在干什么。哈哈! - GTodorov
给未来读者。确保您参考的是 /etc/ssh/sshd_config(注意 sshd)文件。在拔了一个小时头发之后,我才知道这个小差别。;P - Shashanth
我的新路由器使用22号端口进行远程管理,但在界面上并没有列出来,所以它不一定是由ISP提供的。 - tudor -Reinstate Monica-
我正在使用Google Cloud Shell,无论我尝试什么,错误都是一样的。 - Ahwar

我通过以下方式重新安装openssh-server来解决了这个问题:
sudo apt-get purge openssh-server 
sudo apt-get install openssh-server

1在客户端还是服务器端?抱歉,我不太清楚。 - user227495
On client...... - soheil zabihi

检查SSH服务状态,并在其停止时启动SSH服务。
sudo service ssh status

在我的情况下,SSH被停止了,但是在启动服务之后:
sudo service ssh start

我可以远程登录到Linux。


我遇到了同样的错误,但是在重启电脑之后,一切又恢复正常了。
所以,在重新安装某些组件之前,你可以试试这个方法。

另一个可能的原因是终端会话和主机服务器之间的代理需要用户ID和密码访问,它拒绝允许流量通过,这是由于网络防火墙或SSL-Socks等原因。

这似乎不是一个“可能的原因”,尤其是考虑到被接受的答案。 - belacqua

解决方案是在您的服务器端口号之前添加"-p":
命令行示例:
ssh -L localport:127.0.0.1:localport username@ServerIP **-p** **serverport**

只需前往whm,然后打开主机访问控制,更改如下内容:

sshd ALL allow


如果这是您自己的私人服务器,最好的做法是保持简单,不要复杂化事情。由于您无法通过SSH访问您的机器,您可以登录到托管Ubuntu服务器的提供商,并从那里重新启动机器。重新启动后,尝试再次通过控制台(或putty)使用ssh user@ip-address登录。