1. 程式人生 > >ssh 登入時常出現的幾種錯誤以及解決方法(Linux)

ssh 登入時常出現的幾種錯誤以及解決方法(Linux)

前言

ssh是Linux系統中常用的遠端登陸的命令,有的時候我們通過xshell等遠端連線軟體使用ssh去登陸遠端的伺服器的時候,會遇到一些問題。

下面是關於ssh 遠端登陸的問題解決方法的總結。(更新中)

常見報錯及解決

1.SSH連線時出現Connection refused,如下:

報錯如下:
ssh: connect to host 123.123.123.111 port 22: Connection refused

通常是由於22埠未開啟、ssh服務未啟動或防火牆禁止22埠等原因引起的

解決方法:

【1】啟動服務,設定防火牆步驟如下:

<1>.進入該伺服器(本地登陸)

<2>.檢視ssh服務是否啟動
systemctl status sshd

如未啟動
systemctl start sshd

<3>.檢視埠是否開啟
netstat -lnput |grep :22

如未開啟,再次啟動sshd

<4>測試網路的聯通性
ping www.baidu.com (ping外網)

如果ping不通,就檢查dns

如果dns無問題,就說明是網路原因,看伺服器的網線是否連線或是否有問題

<5>如果能連線外網,就檢視伺服器的防火牆規則,並開放ssh服務的22號埠(如防火牆未放行ssh的埠)

iptables -L

[1]直接開啟埠:
iptables -I INPUT -p tcp –dport 22 -j ACCEPT

[2]永久開啟埠

開啟防火牆配置檔案:
vim /etc/sysconfig/iptables

在iptables檔案內容中追加
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

儲存配置檔案後,重啟防火牆:
service iptables restart(centos6)
systemctl restart iptables(centos7)

2.SSH連線時出現Host key verification failed

報錯如下:
Host key verification failed

通常是由於訪問使用的公鑰與伺服器記錄的差異引起的

ssh服務會把每個曾經訪問過計算機或伺服器的公鑰(public key),記錄在~/.ssh/known_hosts
當下次訪問曾經訪問過的計算機或伺服器時,ssh就會核對公鑰,如果和上次記錄的不同,OpenSSH會發出警告。
而ssh對主機的public_key的檢查是有等級的,根據等級執行不同的策略。(StrictHostKeyChecking就是配置等級的引數)

[1]StrictHostKeyChecking=no

最不安全的級別,提示最少,應在相對安全的內網測試時使用。(當連線的伺服器的公鑰在本地不存在,就會自動新增到檔案(預設是known_hosts)中,並且給出警告。

[2]StrictHostKeyChecking=ask

預設的級別。如果連線的伺服器的公鑰和本地的known_hosts檔案中不匹配,就給出提示(Host key verification failed),並拒絕登入。

[3]StrictHostKeyChecking=yes

最安全的級別,如果連線的伺服器的公鑰和本地的known_hosts檔案中的不匹配,就拒絕連線,不會提示詳細資訊。

解決方法 :

【1】可更改安全選擇最低的安全級別。在.ssh/config或/etc/ssh/ssh_config)中配置:

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

(將knownhostfile設為/dev/null),為了方便使用在known_hosts中了)

【2】刪除對應ip的在known_hosts相關資訊

vim /.ssh/known_hosts

這裡寫圖片描述

【3】直接刪除known_hosts檔案
rm known_hosts

3.SSH公私鑰正確的情況下免密登入失敗

有的時候我們經常會遇到:在伺服器上配置ssh公鑰後,一段時間可以免密碼登入,後來登入時,每次都提示要輸入密碼。這時我們可以刪除known_hosts,重新把id_rsa.pub新增到伺服器~/.ssh/authorized_keys下。 如果這個辦法也不行,我們(首先考慮是許可權問題)要檢視日誌。

/var/log/auth.log日誌中報錯如下:
coffeeserver sshd[6761]: Authentication refused: bad ownership or modes for directory /root/.ssh

/var/log/secure日誌中報錯如下:
Authentication refused: bad ownership or modes for directory /root/.ssh

這些日誌都告訴了我們/root/.ssh的目錄的許可權的配置出現了(許可權應為700)

解決方法:

【1】更改目錄及檔案許可權

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

4.SSH連線時密碼正確,登陸失敗,出現Permission denied, please try again

報錯如下:
Password authentication failed

Permission denied, please try again

通常是由於/etc/ssh/sshd_config的PasswordAuthentication或PermitRootLogin引數的配置引起的

解決方法:

【1】修改相關配置檔案

<1>檢視本伺服器和電腦的防火牆設定,是否開啟ssh服務,22埠(一般都是開啟的)
如果服務不是開啟的要將服務啟動,防火牆開放22埠(配置規則看本文目錄第1條中)

<2>編輯sshd_config檔案

vim /etc/ssh/sshd_config

將PasswordAuthentication前面的#號去掉
將PasswordAuthentication 設為yes

<3> 重啟sshd服務

/etc/init.d/sshd restart (centos6)
systemctl restart sshd(centos7)

【2】修改相關配置檔案

<1>基本上與上一個方法相同,但編輯sshd_config檔案的另一個引數

vim /etc/ssh/sshd_config

將PermitRootLogin前面的#號去掉
將PermitRootLogin設為yes

<2>重啟sshd服務

/etc/init.d/sshd restart (centos6)
systemctl restart sshd(centos7)