本文將介紹一些可用於診斷SSH連接的快速方法和技術,包括何時無法連接SSH,身份驗證錯誤等。 |
SSH連接錯誤的常見原因是服務未在遠程服務器上運行。這可能是由於服務意外關閉或系統重新啓動後服務未啓動而引起的。
要檢查SSH服務是否正在運行,請運行下面命令:
[root@server1 ~]# systemctl status sshd
使用以下命令設置SSH服務開機啓動,並啓動服務:
[root@server1 ~]# systemctl enable sshd [root@server1 ~]# systemctl start sshd
調試SSH連接時的第二個常見問題是使用非標準端口。如果SSH在默認端口22以外的其他端口上運行,則除非明確指定運行SSH的端口,否則將不能連接到遠程主機。
要查看運行SSH的端口,請使用netstat之類的工具,如下所示:
[root@clean-idea-1 ~]# netstat -tlunp|grep sshd tcp 0 0 0.0.0.0:28159 0.0.0.0:* LISTEN 818/sshd tcp6 0 0 :::28159 :::* LISTEN 818/sshd
上面的輸出顯示了SSH服務在哪個端口上運行。在這種情況下,它是端口28159。
端口不是默認的22時,連接就需要指定端口了:
[root@server1 ~]# ssh [email protected] -p 28159
SSH連接錯誤的另一個原因是其他服務或進程是否也使用與SSH服務相同的端口。例如,SSH的端口號爲80,這和http服務的端口衝突了,則類似Apache的服務可能正在使用相同的端口。
要查看其他進程是否正在使用與SSH相同的端口,請使用以下命令檢查日誌:
[root@server1 ~]# journalctl -t sshd
該命令應返回如下所示的錯誤,顯示端口已被佔用。
在這可以修改ssh的端口號,打開配置文件將端口修改爲其他的,Port 2222
vim /etc/ssh/sshd_config Port 2222
如果嘗試了上述所有方法,仍無法建立SSH連接,則可以看看防火牆是否阻止連接?
在Cetnos8中,使用fireawlld查看防火牆,並將端口添加允許裏面:
[root@server1 ~]# firewall-cmd --list-all [root@server1 ~]# firewall-cmd --permanent --add-port=2222/tcp success [root@server1 ~]# firewall-cmd --reload success
有時,您可以將SSH配置爲不接受密碼登錄,而僅使用公密鑰身份驗證。如果公鑰在服務器上不可用或缺少私鑰對,則可能導致不能登錄的問題。
要檢查/etc/ssh/sshd_config
配置文件是否允許密碼登錄,請將ssh配置設置爲如下:
[root@server1 ~]# grep PasswordAuthentication /etc/ssh/sshd_config #PasswordAuthentication yes PasswordAuthentication yes # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication, then enable this but set PasswordAuthentication
上面的輸出顯示允許密碼登錄。
本文討論了SSH連接錯誤的主要原因以及如何解決它們。
本文原創地址:https://www.linuxprobe.com/debug-ssh-connections.html