为什么我会收到“端口22:连接被拒绝”错误?

我正在收到一个
port 22: Connection refused 

连接服务器时出现错误。
我已经安装了openssh客户端和服务器,并且它们正在运行。但是仍然出现错误。请帮忙解决。

3请澄清一下,服务器上是否安装了OpenSSH服务器? - Kevin
请检查SSH是否在端口22上运行,并且检查是否有防火墙规则阻止了该端口。 - Manula Waidyanatha
1根据我的意见,配置防火墙以允许通过防火墙的当前被阻止的ssh(端口22)。 - KK Patel
启用sudo ufw enable http://askubuntu.com/questions/417998/why-ubuntu-firewall-not-showing-verbose - user548701
这可能是因为临时的网络中断导致的。所以请检查一下你的网络连接。 - user648610
这可能对你解释如何去做你所建议的事情有用。目前来看,效果不太明显。相关链接:http://www.linuxjournal.com/content/troubleshooting-telnet - Elder Geek
我似乎无法回答,但是我在使用MAC M1时也遇到了同样的问题,对我来说解决办法是通过系统偏好设置进行系统设置更改,具体步骤请参考这里: https://superuser.com/a/190610/917327 - Shefy Gur-ary
7个回答

我遇到了这个问题,最终找到了合适的答案。
sudo apt-get update
sudo apt-get install openssh-server
sudo ufw allow 22

然后在终端窗口中进入raspi-config并启用ssh。
这将允许使用端口22进行sshd连接。

我这里也有同样的问题,就像@SDsolar一样。 - Nathan B
@Nadiv,我也不得不使用raspi-config来启用ssh。回答已经被编辑以反映这一点。 - SDsolar
1已在两台计算机上执行了前三行,文件现已成功传输。为什么Ubuntu默认情况下不安装/启用这些功能呢?“连接被拒绝”错误非常难以理解,我不知道它是防火墙问题、用户名问题、IP地址问题等等。非常令人沮丧。 - Hatefiend
sudo ufw allow 22 之前成功执行过一次,但是现在又出现了错误提示。 - vineeshvs

在服务器上,检查确保sshd实际运行,并且正在监听22号端口。
$ sudo netstat -anp | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1538/sshd       
tcp6       0      0 :::22                   :::*                    LISTEN      1538/sshd       

如果你没有得到结果,或者它们没有显示你正在监听tcp 0.0.0.0:22... 那就修复一下。
如果你确实显示sshd正在运行并且在tcp端口22上进行监听,请检查确保没有防火墙规则阻止连接。同样,在服务器上进行操作:
$ sudo iptables -L | grep ssh
DROP       tcp  --  anywhere             anywhere            tcp dpt:ssh 

或者,作为一个备选方案,
$ sudo ufw verbose
Status: active

To                         Action      From
--                         ------      ----
22                         DENY        Anywhere
22/tcp                     DENY        Anywhere

如果你看到像上面的规则之一,你需要修复它。

如果你没有看到任何防火墙规则,并且你看到服务器上正在运行的服务,那么现在是时候检查你的工作站和它连接的网络了。你能否连接到其他服务器?你能ping通你自己的接口或回环地址吗?等等。


1你能连接到其他服务器吗? - OpenCoderX
2嘿,谢谢你的回答。我的端口不是22,而是2222。你说要修复它,但怎么修复呢? - Yogesh D
我的搜索没有结果。 - SDsolar
使用以下命令修复:sudo ufw allow 22(或者您的端口号) - John D
服务器上没有防火墙规则。但是仍然允许来自本地网络中的个人电脑进行SSH连接,而不允许来自实验室外部(但在同一研究所网络内)的连接。 - vineeshvs
我仍然无法连接。Iptables是否干扰了UFW? - chovy

试试这个

sudo apt-get remove openssh-client openssh-server

然后

sudo apt-get install openssh-client openssh-server

对我来说,这个方法有效 :)

可能不是最传统的解决方案... :)


3使用dpkg-reconfigure可能会比卸载/重新安装的解决方案更容易使用。 - Stephen Michael Kellat
1我不得不使用apt-get purge openssh-server(而不是remove)才能使其正常工作。 - 11101101b

安装Raspbian后遇到了同样的问题。对我有效的解决方案是:
sudo apt-get purge openssh-server
sudo apt-get install openssh-server

如果这个起作用了,那你肯定是在之前修改了你的sshd-config配置文件。 - guntbert
我在设置ssh时编辑了Raspbian上的sshd_config文件。这个解决方案对我有效。 - Scott
+1. 唯一有效的解决方案! - Nathan B

以下命令对我有效:
cd /root/.ssh
vi known_hosts

现在删除文件中的所有内容,并在终端上输入:
service sshd restart

来源:SSH - 连接被拒绝

我也遇到了类似的问题,但是我通过使用ssh-keygen -f "/home/MYUSER/.ssh/known_hosts" -R MYHOST清除了我的known_hosts文件,将其中的MYUSER替换为我的Linux用户,将MYHOST替换为我尝试连接的远程主机。 - Chris
known_hosts是一个存储已知主机的文件,它用于验证与远程主机的连接。当你尝试连接到一个远程主机时,系统会检查known_hosts文件中是否存在该主机的指纹。如果指纹匹配,则连接被视为安全的,并且可以继续进行。然而,如果指纹不匹配,系统会发出警告并阻止连接,以防止潜在的安全风险。因此,了解一些主机的指纹可以帮助防止机器连接到未经验证的或可能存在风险的主机。 - Yan King Yin

在我的情况下,静态IP设置错误。关闭服务器后我通过执行ping <my_ip>这个命令发现问题所在。即使服务器已关闭,仍然可以收到ping的响应。修改了IP地址后问题得以解决。

这个方法可能也适用于你。尝试将连接22端口从你的出口IP地址转发到同一端口上的本地IP地址。对我来说起作用了,让我能够通过SSH连接到远程的Ubuntu计算机。