精講:ssh-keygen 命令的密鑰生成、管理與格式轉(zhuǎn)換實(shí)戰(zhàn))
文檔教程【免費(fèi)下載鏈接】linux-commandLinux命令大全搜索工具內(nèi)容包含Linux命令手冊(cè)、詳解、學(xué)習(xí)、搜集。https://git.io/linux項(xiàng)目地址https://gitcode.com/GitHub_Trending/linux/linux-command點(diǎn)擊查看免費(fèi)下載ssh-keygen是 OpenSSH 套件中負(fù)責(zé)認(rèn)證密鑰生成、管理與轉(zhuǎn)換的核心工具也是 linux-command 項(xiàng)目 command/ssh-keygen.md 收錄的 600 多個(gè) Linux 命令速查條目之一。本文以該手冊(cè)條目為主體結(jié)合倉(cāng)庫(kù)內(nèi) ssh、git、apk 等文檔中沉淀的真實(shí)用法帶你掌握從生成密鑰對(duì)、指定密鑰長(zhǎng)度與類型、設(shè)置口令到查看指紋、提取公鑰、跨格式轉(zhuǎn)換再到配合ssh-copy-id實(shí)現(xiàn)免密登錄的完整鏈路。ssh-keygen 是什么ssh-keygen 命令用于為 “ssh” 生成、管理和轉(zhuǎn)換認(rèn)證密鑰。按手冊(cè)記載它支持 RSA 和 DSA 兩種認(rèn)證密鑰現(xiàn)代 OpenSSH 版本通常還支持 ECDSA、Ed25519 等更多類型具體可用類型以本機(jī)ssh-keygen -t的取值或系統(tǒng) man 手冊(cè)為準(zhǔn)。在 SSH 認(rèn)證體系中密鑰對(duì)由兩部分組成私鑰保存在本地權(quán)限嚴(yán)格受限通常為 600用于簽名與解密絕不外傳公鑰可公開分發(fā)通常部署到遠(yuǎn)程服務(wù)器的~/.ssh/authorized_keys中用于驗(yàn)證身份。倉(cāng)庫(kù)索引文件 dist/data.json 將該命令描述為「為ssh生成、管理和轉(zhuǎn)換認(rèn)證密鑰」與手冊(cè)正文一致可以作為查閱入口。語(yǔ)法ssh-keygen(選項(xiàng))命令本身不要求額外參數(shù)絕大多數(shù)行為通過(guò)選項(xiàng)控制交互式執(zhí)行時(shí)會(huì)提示輸入文件名與口令。選項(xiàng)速查表手冊(cè) command/ssh-keygen.md 中列出了 10 個(gè)核心選項(xiàng)逐條整理如下選項(xiàng)說(shuō)明-b指定密鑰長(zhǎng)度bit如-b 4096生成 4096 位 RSA 密鑰-e讀取 OpenSSH 的私鑰或者公鑰文件轉(zhuǎn)換為其他格式輸出-C添加注釋通常用于標(biāo)識(shí)密鑰用途或持有人郵箱-f指定用來(lái)保存密鑰的文件名生成時(shí)的輸出路徑-i讀取未加密的 ssh-v2 兼容的私鑰/公鑰文件然后在標(biāo)準(zhǔn)輸出設(shè)備上顯示 openssh 兼容的私鑰/公鑰-l顯示公鑰文件的指紋數(shù)據(jù)fingerprint-N提供一個(gè)新密語(yǔ)passphrase-P提供舊密語(yǔ)用于對(duì)已有密鑰進(jìn)行口令變更等操作-q靜默模式減少輸出信息-t指定要?jiǎng)?chuàng)建的密鑰類型如rsa、dsa-y讀取私鑰并輸出對(duì)應(yīng)的公鑰此外ssh 文檔中還展示了與-i、-e配套使用的-m選項(xiàng)用于指定格式轉(zhuǎn)換的目標(biāo)/源格式ssh-keygen -f keyfile -i -m key_format -e -m key_format # key_format: RFC4716/SSH2(default) PKCS8 PEM實(shí)戰(zhàn)一生成一對(duì) RSA 密鑰最常用的操作是直接運(yùn)行ssh-keygen為當(dāng)前用戶生成默認(rèn)密鑰此時(shí)密鑰對(duì)默認(rèn)落在~/.ssh/id_rsa與~/.ssh/id_rsa.pub。倉(cāng)庫(kù) ssh 文檔將其概括為ssh-keygen # 為當(dāng)前用戶生成 ssh 公鑰 私鑰如果需要定制則組合使用-t、-b、-C、-f四個(gè)選項(xiàng)。以 git 文檔中「創(chuàng)建 SSH 密鑰」一節(jié)為例# 生成帶注釋的默認(rèn)密鑰-C 后通常跟郵箱或備注 ssh-keygen -t rsa -C wowohooqq.com # 指定生成目錄和文件名-f 指定輸出路徑 ssh-keygen -t rsa -C wowohooqq.com -f ~/.ssh/ww_rsa第二個(gè)例子會(huì)生成~/.ssh/ww_rsa私鑰與~/.ssh/ww_rsa.pub公鑰兩個(gè)文件這一行為同樣體現(xiàn)在 git 文檔對(duì)-f ~/.ssh/jslite_rsa的說(shuō)明中「會(huì)生成jslite_rsa和jslite_rsa.pub這兩個(gè)文件」。要點(diǎn)說(shuō)明-b 4096可顯式提高 RSA 密鑰強(qiáng)度密鑰越長(zhǎng)安全性越高但計(jì)算開銷也越大-C注釋會(huì)寫入公鑰末尾便于在多把密鑰中區(qū)分歸屬-f指定的路徑需確保父目錄存在如~/.ssh生成后可查看 git 文檔中的公鑰打開方式vim ~/.ssh/jslite_rsa.pub。設(shè)置與清空口令-N 新密語(yǔ)直接在命令行提供新口令適合腳本化批量生成注意命令行會(huì)留下歷史記錄交互式輸入更安全-P 舊密語(yǔ)提供舊口令用于對(duì)已加密的私鑰進(jìn)行口令變更操作兩者配合可在非交互場(chǎng)景下完成口令重置。倉(cāng)庫(kù) git 文檔展示了一個(gè)典型組合——生成無(wú)口令密鑰以便自動(dòng)化免密登錄ssh-keygen -t rsa -P -f ~/.ssh/aliyunserver.key-P 表示舊口令為空字符串配合首次生成即可得到一個(gè)不帶口令的私鑰文件~/.ssh/aliyunserver.key隨后直接用于ssh-copy-id分發(fā)。實(shí)戰(zhàn)二查看公鑰指紋使用-l可以讀取公鑰文件并輸出其指紋fingerprint指紋是公鑰內(nèi)容的哈希摘要用于在不傳輸整個(gè)公鑰的前提下核對(duì)密鑰身份ssh-keygen -l -f ~/.ssh/id_rsa.pub輸出形如2048 SHA256:xxxxxxxx... userhost (RSA)包含密鑰位數(shù)、指紋哈希、注釋與類型。當(dāng)服務(wù)器返回 host key 指紋時(shí)即可用此方式與本機(jī)保存的公鑰比對(duì)確認(rèn)沒有被中間人替換。實(shí)戰(zhàn)三從私鑰提取公鑰當(dāng)只有私鑰、需要恢復(fù)出對(duì)應(yīng)公鑰時(shí)使用-yssh-keygen -y -f ~/.ssh/id_rsa命令會(huì)讀取私鑰并打印對(duì)應(yīng)的公鑰內(nèi)容到標(biāo)準(zhǔn)輸出可重定向追加到目標(biāo)機(jī)器的authorized_keys中。若私鑰設(shè)置了口令會(huì)提示輸入密語(yǔ)。實(shí)戰(zhàn)四密鑰格式轉(zhuǎn)換不同平臺(tái)與工具對(duì)密鑰格式要求不同-e與-i負(fù)責(zé)在 OpenSSH 與 RFC4716/SSH2、PKCS8、PEM 等格式之間互轉(zhuǎn)-e讀取 OpenSSH 的私鑰/公鑰文件輸出為目標(biāo)格式-i讀取未加密的 ssh-v2 兼容私鑰/公鑰文件輸出為 OpenSSH 兼容格式-m配合指定格式可取值RFC4716/SSH2默認(rèn)、PKCS8、PEM如 ssh 文檔注釋所示。典型用法示例# 將 OpenSSH 公鑰轉(zhuǎn)為 RFC4716 格式 ssh-keygen -e -m RFC4716 -f ~/.ssh/id_rsa.pub # 將 RFC4716 格式的公鑰轉(zhuǎn)回 OpenSSH 格式 ssh-keygen -i -m RFC4716 -f rfc4716_key.pub需要注意-i處理的是未加密密鑰若目標(biāo)文件帶口令需先用-P提供舊密語(yǔ)或提前解密。實(shí)戰(zhàn)五配合 ssh-copy-id 實(shí)現(xiàn)免密登錄生成密鑰只是第一步將公鑰安裝到遠(yuǎn)程主機(jī)才是免密登錄的關(guān)鍵。倉(cāng)庫(kù) ssh 給出了完整的「ssh 大家族」工作流ssh-keygen # 為當(dāng)前用戶生成 ssh 公鑰 私鑰 ssh-keygen -f keyfile -i -m key_format -e -m key_format # 密鑰格式轉(zhuǎn)換 ssh-copy-id userip:port # 將當(dāng)前用戶的公鑰復(fù)制到服務(wù)器的 ~/.ssh/authorized_keys之后可以免密登錄git 文檔進(jìn)一步給出了免密登錄的完整兩步ssh-keygen -t rsa -P -f ~/.ssh/aliyunserver.key ssh-copy-id -i ~/.ssh/aliyunserver.key.pub root192.168.182.112 # 這里需要輸入密碼一次ssh-copy-id首次分發(fā)時(shí)需要輸入一次遠(yuǎn)程密碼此后使用私鑰登錄即可免密。若想進(jìn)一步約束連接參數(shù)可在~/.ssh/config中為每臺(tái)主機(jī)聲明獨(dú)立身份文件見 gitHost aliyun1 HostName 192.168.182.112 User root PreferredAuthentications publickey IdentityFile ~/.ssh/aliyunserver.key實(shí)戰(zhàn)六多賬號(hào) SSH 配置當(dāng)同一臺(tái)機(jī)器需要區(qū)分多個(gè)代碼托管賬號(hào)時(shí)-f命名多把密鑰 ~/.ssh/config別名路由是最常用的方案git 文檔給出了完整流程生成指定名字的密鑰ssh-keygen -t rsa -C 郵箱地址 -f ~/.ssh/jslite_rsa復(fù)制公鑰~/.ssh/jslite_rsa.pub內(nèi)容到各托管平臺(tái)編輯~/.ssh/config為每個(gè) Host 指定獨(dú)立IdentityFileHost jslite.github.com HostName github.com User git IdentityFile ~/.ssh/jslite_rsa Host work.github.com HostName github.com User git IdentityFile ~/.ssh/work_rsa使用ssh -T gitjslite.github.com或ssh -T work.github.com測(cè)試連通性克隆倉(cāng)庫(kù)時(shí)將地址中的域名替換為 Host 別名。注意若修改了默認(rèn)id_rsa的名字需要將密鑰加入 SSH agent 才能被正確使用見 gitssh-add ~/.ssh/jslite_rsa ssh-add -l # 查看所有的 key ssh-add -D # 刪除所有的 key ssh-add -d ~/.ssh/jslite_rsa # 刪除指定的 key場(chǎng)景延伸批量部署在 apk 文檔的 Alpine 服務(wù)器初始化流程中ssh-keygen與ssh-copy-id成對(duì)出現(xiàn)用于搭建 Ansible 管理節(jié)點(diǎn)的免密通道apk add ansible # server ssh-keygen /etc/ansible/hosts apk add python # node ssh-copy-id這里的用法印證了 ssh-keygen 在自動(dòng)化運(yùn)維Ansible 主機(jī)清單管理中的基礎(chǔ)地位控制節(jié)點(diǎn)先生成密鑰再由ssh-copy-id分發(fā)至各被管節(jié)點(diǎn)。注意事項(xiàng)私鑰權(quán)限私鑰文件應(yīng)保持600權(quán)限chmod 600 ~/.ssh/id_rsa公鑰可為644過(guò)寬的權(quán)限會(huì)被 SSH 客戶端拒絕使用口令取舍帶口令的私鑰更安全但會(huì)破壞自動(dòng)化腳本的免交互特性需根據(jù)場(chǎng)景權(quán)衡格式邊界-i僅支持未加密密鑰轉(zhuǎn)換前先確認(rèn)目標(biāo)文件是否設(shè)置了口令類型支持手冊(cè)記載支持 RSA 與 DSA 兩種類型實(shí)際可用類型請(qǐng)以本機(jī)ssh-keygen -t的提示與系統(tǒng)文檔為準(zhǔn)。在 linux-command 倉(cāng)庫(kù)中如何查閱命令正文直接閱讀 command/ssh-keygen.md關(guān)聯(lián)實(shí)戰(zhàn)免密登錄與密鑰格式轉(zhuǎn)換見 command/ssh.md多賬號(hào)與免密登錄完整流程見 command/git.mdAlpine 批量部署場(chǎng)景見 command/apk.md索引入口可通過(guò) dist/data.json 中ssh-keygen條目的路徑字段定位到對(duì)應(yīng)手冊(cè)頁(yè)。掌握 ssh-keygen 的選項(xiàng)組合與配套工具鏈即可完成從密鑰生成、格式轉(zhuǎn)換到免密登錄的整套 SSH 認(rèn)證管理。贊分享文檔教程【免費(fèi)下載鏈接】linux-commandLinux命令大全搜索工具內(nèi)容包含Linux命令手冊(cè)、詳解、學(xué)習(xí)、搜集。https://git.io/linux項(xiàng)目地址https://gitcode.com/GitHub_Trending/linux/linux-command點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Aptos CLI E2E 測(cè)試包解析用 Move 示例包驗(yàn)證 aptos move 子命令的端到端正確性Aptos CLI E2E 測(cè)試包解析用 Move 示例包驗(yàn)證 aptos move 子命令的端到端正確性 Aptos 官方 CLI 的 aptos move文檔教程Python SDK 快速起步用 MCPServer 三步構(gòu)建你的第一個(gè) MCP 服務(wù)器Python SDK 快速起步用 MCPServer 三步構(gòu)建你的第一個(gè) MCP 服務(wù)器 本指南帶你完整走通 MCPModel Context Protoc文檔教程linux-command 命令手冊(cè)精講nproc 處理器數(shù)量查詢?cè)斀馀c實(shí)戰(zhàn)linux command 命令手冊(cè)精講nproc 處理器數(shù)量查詢?cè)斀馀c實(shí)戰(zhàn) 本篇基于 linux command 倉(cāng)庫(kù)中的 command/nproc.md文檔教程上一篇Shiny.BluetoothLE開發(fā)教程輕松實(shí)現(xiàn)跨平臺(tái)藍(lán)牙通信下一篇PredNet架構(gòu)詳解從stack_sizes到LSTM模塊的參數(shù)配置秘籍創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考