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)