ssh登陸的調試方法和常見問題

原文連接html

ssh登陸服務器是程序猿平常生活必不可少的一部分,也時不時的會遇到本身配置ssh登陸的問題,拿平常使用的git來說,無論使用github也好,仍是本身搭建的gitlab等等,若是不能很好的理解ssh的原理,極容易遇到各類問題。這篇文章就嘗試向你們簡單講解下ssh的原理、調試方式和常見問題。這裏要講的主要是免密碼登陸,也就是使用密鑰登陸的方式。git

ssh基本原理

ssh密鑰登陸的原理簡單來說就是,你本身有一把鑰匙和鎖(私鑰和公鑰),服務器承認你這把鎖孔,並把它裝在了門上(服務器authorized_keys中),以後你就拿着這把鑰匙就能夠開門了。若是你有好多把鑰匙,那麼你得爲每一個門指定用哪一個鑰匙,在~/.ssh/config中配置便可。鑰匙和鎖的比喻雖然不是很恰當,但能夠這麼理解,容易記憶:)關於ssh的詳情,你們能夠參考SSH原理與運用github

總結下來,ssh密鑰登陸就下面3個步驟:服務器

  1. 生成密鑰對,執行以下命令,回車,能夠自定義密鑰名字,好比mykey,後面你會獲得mykey和mykey.pub,前者是私鑰(鑰匙),後者是公鑰(鎖)。ssh

    ssh-keygen -t rsa
  2. 將公鑰交給服務器。你確定是把鎖給服務器,若是你把鑰匙給服務器,是否是不太對??好多新手在這個問題上都會犯糊塗。這一步只要確保服務器端~/.ssh/authorized_key中有這個公鑰就能夠了,設置方式多樣,不細說。gitlab

  3. 在本地配置服務器和密鑰綁定,配置文件爲~/.ssh/config中,以下:命令行

    Host github.com
         IdentityFile ~/.ssh/mykey
         User git

固然你也能夠在命令行指定使用哪一個密鑰,但這不是麻煩一些嗎?!debug

ssh -i [path to private key] git@github.com

接下來,你應可使用密鑰登陸服務器,若是還不行,你得看看下面的調試大法了。調試

ssh調試大法

發話很少說,直接上大法。日誌

  1. 客戶端調試

    ssh -vvv git@github.com

    是否是有一堆調試信息輸出?!快去看看鏈接時候用的私鑰對不對!

  2. 服務端調試

    /usr/sbin/sshd -d -p 2222

    在客戶端去鏈接這個新端口

    ssh -vvv host -p 2222

此時兩邊都有日誌輸出,啥問題都能看到了!!

ssh常見問題

其實有了上面的調試大法,全部問題都能迎刃而解了,這裏只記錄下我碰到的一個問題。

問題描述

爲新同事創建一個服務器登陸賬號,使用以下命令:

useradd -d /home/test test

而後將其公鑰放進 /home/test/.ssh/authorized_keys 中,以後test用戶卻沒法登陸服務器。

問題解決

首先,使用客戶端調試大法,任何異常都沒有發現,使用的私鑰也是正確的,可是卻沒法鏈接。

接下來就服務端調試大法,發現異常,說是test用戶不可用,處於鎖定狀態。

問題找到,原來直接建立用戶後,若是不給它設定密碼,用戶就是鎖定狀態,沒法使用。用戶狀態能夠經過如下命令查看。

passwd -S test # 查看用戶狀態
passwd -l test # 鎖定用戶
passwd -u test # 激活用戶

小結

出了問題不可怕,可怕的是沒有定位問題的方法,想一想馬航搜救,東一頭西一頭,好可怕哦~

之後ssh登陸遇到問題能夠本身解決了吧?!不用謝!

參考資料

  1. SSH原理與運用
相關文章
相關標籤/搜索