原文連接html
ssh登陸服務器是程序猿平常生活必不可少的一部分,也時不時的會遇到本身配置ssh登陸的問題,拿平常使用的git
來說,無論使用github
也好,仍是本身搭建的gitlab
等等,若是不能很好的理解ssh
的原理,極容易遇到各類問題。這篇文章就嘗試向你們簡單講解下ssh的原理、調試方式和常見問題。這裏要講的主要是免密碼登陸,也就是使用密鑰登陸的方式。git
ssh密鑰登陸的原理簡單來說就是,你本身有一把鑰匙和鎖(私鑰和公鑰),服務器承認你這把鎖孔,並把它裝在了門上(服務器authorized_keys中),以後你就拿着這把鑰匙就能夠開門了。若是你有好多把鑰匙,那麼你得爲每一個門指定用哪一個鑰匙,在~/.ssh/config
中配置便可。鑰匙和鎖的比喻雖然不是很恰當,但能夠這麼理解,容易記憶:)關於ssh的詳情,你們能夠參考SSH原理與運用。github
總結下來,ssh密鑰登陸就下面3個步驟:服務器
生成密鑰對,執行以下命令,回車,能夠自定義密鑰名字,好比mykey,後面你會獲得mykey和mykey.pub,前者是私鑰(鑰匙),後者是公鑰(鎖)。ssh
ssh-keygen -t rsa
將公鑰交給服務器。你確定是把鎖給服務器,若是你把鑰匙給服務器,是否是不太對??好多新手在這個問題上都會犯糊塗。這一步只要確保服務器端~/.ssh/authorized_key
中有這個公鑰就能夠了,設置方式多樣,不細說。gitlab
在本地配置服務器和密鑰綁定,配置文件爲~/.ssh/config
中,以下:命令行
Host github.com IdentityFile ~/.ssh/mykey User git
固然你也能夠在命令行指定使用哪一個密鑰,但這不是麻煩一些嗎?!debug
ssh -i [path to private key] git@github.com
接下來,你應可使用密鑰登陸服務器,若是還不行,你得看看下面的調試大法了。調試
發話很少說,直接上大法。日誌
客戶端調試
ssh -vvv git@github.com
是否是有一堆調試信息輸出?!快去看看鏈接時候用的私鑰對不對!
服務端調試
/usr/sbin/sshd -d -p 2222
在客戶端去鏈接這個新端口
ssh -vvv host -p 2222
此時兩邊都有日誌輸出,啥問題都能看到了!!
其實有了上面的調試大法,全部問題都能迎刃而解了,這裏只記錄下我碰到的一個問題。
爲新同事創建一個服務器登陸賬號,使用以下命令:
useradd -d /home/test test
而後將其公鑰放進 /home/test/.ssh/authorized_keys
中,以後test用戶卻沒法登陸服務器。
首先,使用客戶端調試大法,任何異常都沒有發現,使用的私鑰也是正確的,可是卻沒法鏈接。
接下來就服務端調試大法,發現異常,說是test用戶不可用,處於鎖定狀態。
問題找到,原來直接建立用戶後,若是不給它設定密碼,用戶就是鎖定狀態,沒法使用。用戶狀態能夠經過如下命令查看。
passwd -S test # 查看用戶狀態 passwd -l test # 鎖定用戶 passwd -u test # 激活用戶
出了問題不可怕,可怕的是沒有定位問題的方法,想一想馬航搜救,東一頭西一頭,好可怕哦~
之後ssh登陸
遇到問題能夠本身解決了吧?!不用謝!