一、SSH證書登錄步驟:
- 客戶端在本地生成SSH證書:包括公鑰和私鑰,一般創建私鑰時應該設置好自己的密碼,然後將私鑰妥善保存在客戶端,防止被盜。
- 服務器添加公鑰白名單:客戶端將公鑰上傳至服務器,或者交給運維人員,然後將公鑰添加至ssh的信任列表中就可以了。
- 用戶可以用一個私鑰登錄不同服務器,只要在想登錄的服務器中添加自己的公鑰即可。
二、客戶端創建私鑰和公鑰
1、在客戶端運行命令
ssh-keygen -t rsa -f ~/.ssh/id_rsa_web1 -C "key for web1"
-b:指定密鑰長度;
-C:添加註釋;
-e:讀取openssh的私鑰或者公鑰文件;
-f:指定用來保存密鑰的文件名,不設置路徑默認保存在用戶~/.ssh/目錄下;
-i:讀取未加密的ssh-v2兼容的私鑰/公鑰文件,然後在標準輸出設備上顯示openssh兼容的私鑰/公鑰;
-l:顯示公鑰文件的指紋數據;
-m 參數指定密鑰的格式,PEM(也就是RSA格式)是之前使用的舊格式
-N:提供一個新密語;
-P:提供(舊)密語;
-q:靜默模式;
-t:指定要創建的密鑰類型,有rsa1(SSH1),dsa(SSH2),ecdsa(SSH2),rsa(SSH2)等類型, 證書登錄常用的是的是rsa類型
2、運行命令會提示輸入密碼,如果測試不需要密碼可以直接敲回車
3、最後生成兩個文件,分別是 id_rsa_web1(私鑰)和id_rsa_web1.pub(公鑰) :
私鑰
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA3miSzJOGnDHW8c/4RpmrLwlUFzQqYTeekzqdl8EiyEr+QVae
…中間內容忽略…
R3ts4WhP0MOwldynTdEfTDYqZW/Z8OjuXGpCblD2tcsXsygGgvQ7
-----END RSA PRIVATE KEY-----
公鑰
ssh-rsa AAAAB3NzaC1yQD…省略…mZnKat8ibmDf key for web1
4、Windows可以下載GitBash工具運行命令行
https://git-scm.com/download/win
三、服務器SSH配置
1、使用root用戶打開ssh配置文件,修改前養成備份的習慣。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bk
vim /etc/ssh/sshd_config
配置修改如下:
#禁用root賬戶登錄,非必要
PermitRootLogin no
# 是否讓 sshd 去檢查用戶家目錄或相關檔案的權限數據,
StrictModes no
# 是否允許用戶使用密鑰登入系統,僅version 2。
RSAAuthentication yes
PubkeyAuthentication yes
# 公鑰白名單數據保存位置
AuthorizedKeysFile %h/.ssh/authorized_keys
# 禁用密碼登錄
PasswordAuthentication no
2、將客戶端祕鑰上傳至服務器
scp ~/.ssh/id_rsa_web1.pub [email protected]:~/.ssh/
test 目標服務器用戶名,192.168. 是目標服務器地址,: 後面是保存路徑。
如果從遠程下載 將兩個地址格式互換一下(window同理)
scp [email protected]:~/.ssh/id_rsa_web1.pub ~/.ssh/
3、將公鑰寫入白名單
cat ~/.ssh/id_rsa_web1.pub >> ~/.ssh/authorized_keys
cat 打印公鑰內容
>> 將內容直接追加到authorized_keys文件末尾。也可以使用vim編輯直接將公鑰內容粘貼到末尾。
authorized_keys內容如下:
ssh-rsa AAAAB3N+hFt…省略…8IiPybRJdPMsur/NeN3U8t test
ssh-rsa AAAAB3NzaC1yQD…省略…mZnKat8ibmDf key for web1
4、編輯好之後重啓ssh服務
/etc/init.d/ssh restart
四、客戶端SSH證書連接
1、使用ssh證書登錄服務器
ssh -i ~/.ssh/id_rsa_web1.pub [email protected]
-i: 指定私鑰路徑
2、使用scp命令
scp -i ~/.ssh/id_rsa_web1.pub ~/1.txt [email protected]:~
3、 修改客戶端ssh配置文件,設置默認的證書
#添加證書地址
IdentityFile ~/.ssh/id_rsa
五、不同服務器單獨配置證書
1、配置host文件
vi /etc/hosts
(windows 目錄 C:\Windows\System32\drivers\etc,需要右擊用管理員權限運行記事本)
內容如下:
192.168.1.112 web1.com
192.168.1.113 web2.com
2、編輯ssh配置文件(windos在C:\Users\用戶.ssh文件夾下)
vim /etc/ssh/sshd_config
(windos 在C:\Users\用戶\.ssh文件夾下)
內容如下:
Host web1.com
IdentityFile ~/.ssh/id_rsa_web1
User test
Host web2.com
IdentityFile ~/.ssh/id_rsa_web2
User root
Host 爲要登錄的服務器
IdentityFile 爲證書私鑰地址
User 爲登錄的用戶
重啓服務後(window不用重啓),登錄服務器就不需要指定證書地址了
六、證書加密方式遇到的問題
1、在使用rsa加密方式生成私鑰後,無法導入xshell工具中,或報錯:Resource temporarily unavailable. Authentication by key (/Users/youname/.ssh/id_rsa) failed (Error -16). (Error #35)。
打開私鑰文件對比發現,生成的私鑰第一行變成了“BEGIN OPENSSH PRIVATE KEY” 而不是“BEGIN RSA PRIVATE KEY”,新版本ssh命令,使用rsa加密時,默認都是OPENSSH格式。
解決方式:
使用命令 ssh-keygen -m PEM -t rsa -b 4096
可生成舊版本格式。