SSH證書登錄實現步驟

一、SSH證書登錄步驟:

  1. 客戶端在本地生成SSH證書:包括公鑰和私鑰,一般創建私鑰時應該設置好自己的密碼,然後將私鑰妥善保存在客戶端,防止被盜。
  2. 服務器添加公鑰白名單:客戶端將公鑰上傳至服務器,或者交給運維人員,然後將公鑰添加至ssh的信任列表中就可以了。
  3. 用戶可以用一個私鑰登錄不同服務器,只要在想登錄的服務器中添加自己的公鑰即可。

二、客戶端創建私鑰和公鑰

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 可生成舊版本格式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章