ssh密鑰對認證
以非根用戶deploy 身份登錄服務器
$ ssh deploy@192.168.33.30
這個命令會要求你輸入deploy用戶的密碼,然后登錄服務器。我們可以禁用密碼認證,
加強安全。密碼認證有漏洞,會受到暴力攻擊,不懷好意的人會不斷嘗試猜測你的密
碼。使用s登錄服務器時應該使用SSH密鑰對認證。
密鑰對認證是個復雜的話題。簡單來說,我們在本地設備中創建一對“密鑰”,其中
個是私鑰(保存在本地設備中),另一個是公鑰(傳到遠程服務器中)。之所以叫密鑰
對,是因為使用公鑰加密的消息只能使用對應的私鑰解密使用SSH密鑰對認證方式登錄遠程設備時,遠程設備會隨機創建一個消息,使用公鑰加
密,然后把密文發給本地設備。本地設備收到密文后使用私鑰解密,然后把解密后的消
息發給遠程服務器。遠程服務器驗證解密后的消息之后,再賦予你訪問服務器的權限
我極大地簡化了這個過程,不過相信你已經掌握要點了
如果要在多台電腦中登錄遠程服務器,或許不應該使用SSH密鑰對認證。如果想這么
做,要在每台本地電腦中生成SSH密鑰對,然后再把每個密鑰對中的公鑰復制到遠程服
務器中。遇到這種情況,或許最好使用安全的密碼進行密碼認證。然而,如果只通過
台本地電腦訪問遠程服務器(很多開發者都是這樣),SSH密鑰對認證是最好的方式。
創建秘鑰對
本地設備
$ ssh-keygen
按照屏幕上顯示的內容,根據提示輸入所需的信息。
會在本地設備中創建兩個文件:~/.ssh/id_rsa.pub(公鑰) 和 ~/.ssh/id_rsa (私鑰)。私鑰應保存於本地電腦中,且需保密。公鑰必須復制到服務器中,可使用scp(安全復制)命令復制公鑰:
$ scp ~/.ssh/id_rsa.pub deploy@192.168.33.30:
切記末尾加上:! 此命令會把公鑰復制到遠程服務器中deploy用戶的家目錄中。
遠程服務器設置,通過信任公鑰
下面以deploy用戶的身份登錄遠程服務器。登錄后,確認~/.ssh目錄是否存在,不存在創建:
$ mkdir ~/.ssh
創建~/.ssh/authorized_keys
$ touch ~/.ssh/authorized_keys
把上傳的公鑰添加到~/.ssh/authorized_keys文件中:
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
最后,修改目錄及文件的訪問權限,只讓deploy用戶訪問~/.ssh目錄和~/.ssh/authorized_keys。
$ chown -R deploy:deploy ~/.ssh;
$ chmod 700 ~/.ssh;
$ chmod 600 ~/.ssh/authorized_keys;
配置完成,現在可通過ssh登錄遠程服務器。
禁用密碼,禁止根用戶登錄
讓遠程服務器再安全一些。我們要禁止所有用戶通過密碼認證登錄,還要禁止
根用戶登錄。記住,根用戶能做任何事,所以我們要盡量不讓根用戶訪問服務器。
以 deploy用戶的身份登錄遠程服務器,然后在你喜歡的文本編輯器中打開/ etc/ssh/sshd
_config文件。這是SSH服務器軟件的配置文件。找到 PasswordAuthentication設置,將其
值改為no;如果需要,去掉這個設置的注釋。然后,找到 PermitRootlogin設置,將其
值改為no;如果需要,去掉這個設置的注釋。保存改動,然后執行下述命令重啟SSH服
務器,讓改動生效:
sudo service ssh restart
sudo systemctl restart sshd. service
現在必須通過ssh密鑰對連接服務器,並且用戶非root。
實際使用中
我待過的公司的做法,定期的對 root或者其他賬戶的密碼進行修改,然后都是通過秘鑰