Public Key認證是什么
這是一種認證方法,類似於常見的用戶名密碼認證方法。不同的是需要在客戶端機器上保留一個很長很長的加密key,而在服務器端需要做出相應的配置。當客戶端想要訪問服務器時,服務器則會檢查自身配置並根據客戶端所提供的用戶名來識別客戶端。說白了就是實現了無密碼訪問,並同時兼有安全保障措施。
認證過程簡要說明
Public key對數據進行加密而且只能用於加密,Private key只能對所匹配的Public key加密過的數據進行解密。我們把Public key放在遠程系統合適的位置,然后從本地開始進行ssh連接。此時,遠程的sshd會產生一個隨機數並用我們產生的Public key進行加密后發給本地,本地會用Private key進行解密並把這個隨機數發回給遠程系統。最后,遠程系統的sshd會得出結論我們擁有匹配的Private key允許我們登錄。
客戶端配置
一、使用客戶端的用戶登錄,然后運行命令“ssh-keygen -t dsa”生成Public Key和Private Key,例子如下:
[root@someserver ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): /root/.ssh/id_dsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
blah:blah:blah:blah:blah:blah:blah:blah:blah:blah root@someserver
二、設置權限(root用戶默認都OK的,新建其他用戶后需要執行下)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
服務器端配置
一、從目錄/etc/或/etc/ssh/或/etc/conf.d/中找到sshd_config文件,並用vi編輯器打開
二、啟用RSAAuthentication和PubkeyAuthentication,並同時指定authorized_keys文件位置,設置如下:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile ~/.ssh/authorized_keys(新建的用戶要對應上)(但在debian中的~為%h不要改動,否則失敗)
三、更新並保存sshd_config文件后,運行命令“service sshd restart”重新啟動服務,不同版本Linux的服務啟動方式見:http://theos.in/desktop-linux/tip-that-matters/how-do-i-restart-linux-network-service/
四、以上三步只是啟用無密碼驗證功能,想要這個功能生效,還必須把客戶端生成的Public Key配置到服務器的authorized_keys文件中去。把之前在客戶端生成的id_rsa.pub文件內容拷貝到authorized_keys中(當然這個文件要新建,如果不想新建,可以參考ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3),如果有多個客戶端,那么需要把每個客戶端生成的Public Key都拷貝進來,注意換行,一個客戶端一行。
測試
一、登錄客戶端,運行命令“ssh username@servername”,運行命令“ssh -vvv -o PreferredAuthentications=publickey username@servername”可以強制使用Public Key驗證方法。(如果無法驗證通過請看下key的內容,因為有的是fqdn需要本地解析下)
二、測試SFTP可以使用命令“sftp username@servername”
注意事項
.ssh目錄的屬主、屬組使用當前用戶與用戶組
.ssh目錄的權限請保持700
authorized_keys的權限為644
id_rsa的權限為600
id_rsa.pub的權限為644
檢查用戶$HOME目錄權限必須為755
轉載於: https://blog.51cto.com/481814/1429512