SSH協議常見問題排錯

一、SSH登錄linux服務器密碼驗證很慢

現象:ssh登錄服務器後,輸入密碼時,驗證要等10秒左右,很慢。登錄上去後速度正常,這種情況主要有兩種可能的原因:

1. DNS反向解析的問題

OpenSSH在用戶登錄的時候會驗證IP,它根據用戶的IP使用反向DNS找到主機名,再使用DNS找到IP地址,最後匹配一下登錄的IP是否合法。如果客戶機的IP沒有域名,或者DNS服務器很慢或不通,那麼登錄就會很花時間。

解決辦法:

在目標服務器上修改sshd服務器端配置,並重啓sshd

vi /etc/ssh/sshd_config,設置UseDNS爲no即可
或者直接執行sed命令
sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
(後續會專門總結一遍關於grep、sed、awk三劍客,以滿足進行文本處理及日誌分析)

配置修改後,執行systemctl restart sshd,重啓sshd服務即可。

2. 關閉ssh的gssapi認證

用ssh -v user@server 可以看到登錄時有如下信息:

debug1: Next authentication method: gssapi-with-mic

debug1: Unspecified GSS failure. Minor code may provide more information

注:ssh -vvv user@server 可以看到更細的debug信息

解決辦法:

在客戶端上修改ssh客戶端配置(注意不是sshd_conf)

vi /etc/ssh/ssh_config,設置GSSAPIAuthentication no 並重啓sshd

可以使用ssh -o GSSAPIAuthentication=no user@server登錄

GSSAPI ( Generic Security Services Application Programming Interface) 是一套類似Kerberos 5 的通用網絡安全系統接口。該接口是對各種不同的客戶端服務器安全機制的封裝,以消除安全接口的不同,降低編程難度。但該接口在目標機器無域名解析時會有問題

使用strace查看後發現,ssh在驗證完key之後,進行authentication gssapi-with-mic,此時先去連接DNS服務器,在這之後會進行其他操作。

二、SSH登錄被拒絕

  1. 查看是否安裝ssh服務:
rpm -qa |grep openssh-server
apt install openssh-server #Ubuntu系統安裝方式
yum -y install openssh-server #Redhat、CentOS等安裝方式

2.查看是否允許root賬號直接登錄
more /etc/ssh/sshd.config
#PermitRootLogin yes

3.查看SSH服務是否正常、及是否有拒絕訪問的主機

 service sshd status
#Apr 26 ****refused connect from 172.0.113.34
#說明拒絕該172.0.113.34訪問

4.清空黑名單列表,並將該IP加入白名單即可解決ssh登錄問題

more /etc/hosts.deny 
#清空相應被加入黑名單的ip,並將IP寫入 /etc/hosts.allow,格式如下:
    # echo "sshd: 172.0.113.34" >> /etc/hosts.allow

以下是剛剛做實驗碰到的小案例
在連接服務器時,我不斷着輸錯密碼,導致觸發機制,無法SSH訪問qinlulu
(提示:ssh_exchange_identification: read: Connection reset by peer

## -v表示查看連接詳細信息
 ssh -v [email protected]

qinlulu
解決辦法:

在服務端更改配置文件
qinlulu
重啓下sshd服務,即可接觸限制,實現SSH訪問

下面的排錯方法是我之前在網上看到後珍藏的,感興趣的小夥伴可以嘗試下。
echo “” > /var/log/secure #清空日誌文件
service rsyslog restart #重置系統日誌計數器
service denyhosts stop #停止服務
/usr/share/denyhosts/data #關於hosts.deny中的IP記錄一併清空
service denyhosts start #啓動服務
vim /etc/hosts.deny #將解禁的IP刪除
/usr/share/denyhosts/daemon-control restart #重啓。 完畢

三、SSH登錄後的超時設置

有些小夥伴是否困惑過,登錄服務器以後,我明明已經敲上TMOUT=0,爲何過段時間還會自動斷開連接呢?

您可以這樣做:

 vi /etc/ssh/sshd_config 
  ClientAliveInterval 60
  ClientAliveCountMax 3

解釋下:

ClientAliveInterval 60,指定了服務器端向客戶端請求消息的時間間隔,默認是0,不發送。而ClientAliveInterval=60表示每分鐘發送一次,然後客戶端響應,這樣就保持長連接了。
ClientAliveCountMax :使用默認值3即可, ClientAliveCountMax表示服務器發出請求後客戶端沒有響應的次數達到一定值,就自動斷開。當然,正常情況下,客戶端不會不響應

四、利用SSH協議實現文件傳輸:SCP

在介紹SSH協議族時,說明SSH不僅可以進行遠程控制,也可以在計算機之間傳送文件。

scp就是secure copy,一個在linux下用來進行遠程拷貝文件的命令。
scp用法舉例:

  • 從本地複製到遠端
    1.複製文件

命令格式:

  scp '本地文件' 遠端用戶名@遠端設備IP:遠端文件夾
  #舉例:scp /home/test.txt [email protected]:/home 

2.複製文件夾

命令格式:

## -r:遞歸複製整個目錄
scp -r '本地文件夾'   遠端用戶名@遠端設備IP:遠端文件夾

舉個例子吧:
qinlulu

  • 從遠端複製到本端
    1.複製文件:

從遠程複製到本地,只要將從本地複製到遠程的命令的後2個參數調換順序即可;

命令格式:

scp 遠端主機名@遠端設備IP:/遠端主機文件 /存放在本地的文件夾
#舉例: scp [email protected]:/test/test1.txt /tmp

2.複製文件夾

scp -r 遠端主機名@遠端設備IP:/遠端主機文件夾/ /存放在本地的文件夾

舉例:
qinlulu
更多IT技術,請微信搜索公衆號“秦露露”或者掃描下方二維碼關注
qinlulu

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章