在mac中生成, 導入ssh 私鑰並配置
生成密鑰對
眾所週知, 非對稱性加密中存在公鑰(public key)與私鑰(private key)
一般如果要用於ssh 登入或是GitHub ssh 密鑰, 你需要在本地生成密鑰對, 添加公鑰到遠端服務器或是GitHub, 並透過私鑰來建立安全通信
密鑰對的生成很簡單, 使用下面命令即可
1 | ssh-keygen -t rsa -C "這裡可以寫註釋" |
-t rsa指的是生成rsa 密鑰對-C "註釋"添加注釋, 可以不寫, 也可以寫你的 email
接著會問你要把生成出來的密鑰對放在哪, 預設會存在 ~/.ssh目錄下, 預設檔案名為id_rsa, 如果不想改可以直接點enter
1 | Generating public/private rsa key pair. |
接下來會問你要 passphrase, 這相當於你的私鑰的密碼, 不寫就沒有密碼
Passphrase是一个用于加密和保护你的私钥的密码。在生成SSH密钥对时,系统会要求你输入一个passphrase以保护你的私钥不被未经授权的访问者获取到。
如果你将生成的私钥用于访问远程服务器或代码托管服务,那么passphrase就是保护你SSH私钥的第一道防线,以防止其他人使用你的密钥进行未授权的操作。
当你使用生成的SSH密钥进行SSH会话时,系统会要求你输入passphrase。如果你正确地输入了passphrase,那么你就可以继续与远程服务器进行通信,否则你将无法通过验证,无法进行后续操作。
因此,尽管输入passphrase可能会给你带来一些不便,但这是保护你SSH密钥和与远程服务器的通信的一种非常重要的安全措施。
– chatGPT 3.5
然後你的密鑰對就生成好了, 應該會放在你前面指定的位置, 如果沒有指定就會是 ~/.ssh/ 目錄下的 id_rsa和id_rsa.pub
沒副檔名那個是私鑰, 副檔名為.pub 那個文件就是公鑰
公鑰和私鑰文件都是純文字文件, 如果平台(如GitHub)要求你貼上公鑰文本, 直接把公鑰的內容貼進去就行了
向服務器導入public key
用於GitHub密鑰的導入很簡單, 用網頁介面就行了
如果你生成密鑰對的目的是用於 ssh, 這裡還有一些有價值的內容
生成完密鑰對後, 我們需要向服務器傳送公鑰
如果你使用的服務器提供商可以讓你上傳公鑰, 那你直接上傳就行了
接下來介紹使用命令向遠端服務器傳送並導入ssh 公鑰的方法
ssh-copy-id
使用 ssh-copy-id命令來向服務器傳送公鑰
1 | ssh-copy-id -i <publickey.pub> [email protected] |
-i <publickey.pub>指定公鑰文件[email protected]就是你一般連接ssh 時的用戶名@主機
要注意, 在存放公鑰的目錄下必須要有一個 同名的私鑰文件, 因為 ssh-copy-id 命令 預設會去尋找你的 私鑰, 以確保你持有對應私鑰, 找不到的話會可能會報錯
報錯信息可能會長得像這樣
1 | /usr/local/bin/ssh-copy-id: ERROR: failed to open ID file './id_rsa': No such file or directory |
可以使用 -f 規避, 令ssh-copy-id不去尋找對應的私鑰
所以就會是
1 | ssh-copy-id -i <publickey.pub> -f user@host |
導出的 public key 會被存在服務器的 ~/.ssh/authorized_keys 檔案中
此處參考了 StackExchange 的
這篇文章
使用私鑰ssh遠程服務器
現在, 服務器上有公鑰, 你的手上有對應的私鑰, 可以嘗試連結了
不導入 private key 直接連線
你可以在 ssh 的時後直接提供私鑰文件 並連接
1 | ssh -i <path to key> [email protected] |
當然, 如果你不想每次 ssh 的時候都要提供私鑰文件的位置, 你可以導入私鑰
導入私鑰
將私鑰文件 放在某個合適的地方, 然後在 ~/.ssh/config文件中添加以下條目:
1 | Host 93.184.216.34 example.com |
- 如果希望使用域名及ip訪問, 或是有多個指向同一服務器的域名, 就在
Host欄目後面(上例第一行)多添加幾條, 用空格隔開, 可參考上面例子 HostName寫的是服務器的 ipUser寫的是你ssh 登入時的用戶名IdentifyFile寫 私鑰的位置 就行
對了, 在mac 上修改 .ssh/config 文件 是不需要重啟 ssh 服務的, 儲存後就會自動刷新
導入 GitHub ssh key
總體差不多, 可以參考下面的例子
1 | # GitHub |
添加完後ssh 一下github 做個測試
1 | ssh [email protected] |
如果你看到他打印你的 github 用戶名, 就代表你成功了
一些可能會遇到的其他問題
key too open
在嘗試使用私鑰登入服務器時, 系統可能會抱怨私鑰文件權限太開放, 因此拒絕連線
報錯信息類似
1 | Permissions 0777 for '/Users/username/.ssh/id_rsa' are too open. |
解決方法很簡單, 改權限就行了
1 | chmod 600 <keyFile> |

