使用用戶賬號進行 ssh 連接認證有密碼被泄露的風險,為了規避這個風險,可以使用密鑰的方式進行身份認證。使用密鑰就需要將公鑰添加到服務器,我們今天介紹一下如何將公鑰添加到服務器。
我們假設大家了解 ssh 的基本概念,且在 linux 服務器上已經啟動了 ssh,個人計算機上已經生成了 ssh 密鑰?,F在需要做的就是將公鑰上傳到服務器的授權密鑰,這樣就可以不需要賬號密碼來訪問服務器了。
前置條件
在正式開始介紹之前,我們需要準備的東西如下:
1)目標服務器已經啟用 ssh;
2)已經生成了公鑰和私鑰(使用命令 ssh-keygen -t rsa);
3)在服務器上有可用的賬戶(用戶名和密碼,root 也可以);
4)知道服務器的 IP 地址。
滿足上述四個條件后,接下來我們就來看看如何使用公鑰身份認證。
方法1:自動將ssh密鑰復制到服務器
第一種方法是用戶將其個人計算機的公鑰復制到遠程服務器上的授權密鑰列表中。
這里,我假設你能夠使用 ssh 登錄到遠程服務器 user_name@ip_of_server,它會詢問你的帳戶密碼,然后您進入服務器。
如果你將公鑰添加到服務器,那么就應該可以在不輸入密碼的情況下登錄。
OpenSSH 提供了一個稱為 ssh-copy-id 的工具,用于將 ssh 公鑰復制到遠程系統,它還可以創建所需的目錄和文件。如下命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub YOUR_USER_NAME@IP_ADDRESS_OF_THE_SERVER
出現系統提示時,輸入遠程服務器上用戶帳戶的密碼,公鑰就會自動復制到遠程服務器上的相應文件夾中。
上述命令中有個路徑:~/.ssh/id_rsa.pu,這是 ssh 公鑰的默認位置,大家需要根據自己實際情況修改這個路徑。
方法2:手動將 ssh 公鑰添加到服務器
第一種方法在用戶端執行操作。假設你是系統管理員,你的服務器不允許通過密碼進行 ssh 登錄,那么訪問服務器的唯一方法是使用 ssh 公鑰身份驗證。
在這種情況下,你可以要求最終用戶提供其公鑰。現在,你可以做的是創建 .ssh/authorized_keys 目錄,然后在這里復制公鑰。
步驟1:獲取公鑰
鍵入如下命令,要求用戶提供公鑰:
cat ~/.ssh/id_rsa.pub
它將顯示一個以 ssh-rsa 開頭的長字符串:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
你可以通過電子郵件或即時消息工具來獲取上述文本。
步驟2:在用戶的主目錄中創建ssh目錄(作為sysadmin)
注意,你必須在最終用戶的主目錄中創建這些新目錄和文件,而不是你的主目錄(root/sysadmin)。
mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys
然后使用文本編輯器(比如 vim)打開這個文件 /home/user_name/.ssh/authorized_keys,并在此處添加用戶公鑰:
vim /home/user_name/.ssh/authorized_keys
保存并關閉。
步驟3:為文件設置權限
然后我們需要為文件設置適當的權限,否則回看到類似 Permission denied (publickey) 的報錯信息。
首先,確保設置正確的文件權限:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys
由于我們使用 root 或我們自己的管理員帳戶為其他用戶創建了這些文件,所以需要更改用戶的所有權:
chown -R username:username /home/username/.ssh
這樣就完成了,可以讓最終用戶嘗試登錄一下了。