Linux SSH密钥生成与配置实战指南:Ed25519密钥对设置教程
2026/6/23 17:50:33 网站建设 项目流程

1. 项目概述:为什么你今天必须亲手生成一对SSH密钥

在Linux系统里敲下ssh user@host就能连上远程服务器——这看似轻巧的一行命令背后,其实藏着一套精密的身份验证机制。而SSH密钥对,就是这套机制里最核心、最可靠、也最容易被新手忽略的“数字身份证”。它不是什么高深莫测的加密黑科技,而是Linux运维、开发、DevOps工程师每天都在用的基础设施级工具。我从2012年开始在IDC机房搭第一台CentOS服务器起,就靠它免去了成百上千次输密码的重复劳动;后来带团队做CI/CD流水线,所有Git仓库鉴权、Jenkins节点连接、K8s集群访问控制,底层全靠id_rsaid_rsa.pub这两份文件撑着。你可能已经用过VS Code的Remote-SSH插件,点一下就直连服务器——但你有没有想过,它凭什么敢让你跳过密码输入?答案就藏在~/.ssh/authorized_keys这个不起眼的文本文件里。它不存储密码,只存公钥指纹;它不依赖网络服务,只认数学签名;它甚至能让你在Ubuntu、CentOS、Debian、AlmaLinux乃至国产Linux发行版(如统信UOS、麒麟V10)上,用同一套流程完成身份绑定。这不是一个“可选技巧”,而是现代Linux工作流的默认起点。如果你还在用明文密码登录服务器,那相当于把家门钥匙刻在玻璃门上——别人一眼就能看见,而且每次开门都得当众掏钥匙。而SSH密钥,是你给自己配了一把只有你能复制、但别人永远无法仿造的隐形锁芯。接下来我要带你走完从零生成密钥、安全分发、实测验证到故障排查的完整闭环,每一步都附带真实终端截图级的操作逻辑、参数取舍依据,以及我踩过坑后总结出的3个关键避雷点。

2. 核心设计思路与方案选型解析

2.1 为什么不用密码登录?密钥认证的底层逻辑是什么

很多人以为SSH密钥只是“省事”,其实它解决的是更本质的安全悖论:密码认证本质上是把信任建立在“你知道什么”上,而密钥认证是把信任建立在“你拥有什么”上。当你用ssh user@host输入密码时,服务器会把你的密码哈希值和/etc/shadow里的记录比对——这个过程本身没问题,但问题出在传输环节:即使走SSH加密通道,密码仍需在客户端生成、传输、被服务端解密验证,整个链路存在被中间人劫持或暴力爆破的风险。而密钥认证完全不同:客户端用私钥对一段随机挑战数据进行签名,服务器仅用你提前存好的公钥验证签名有效性。整个过程不传输私钥,不暴露密码,不依赖服务端存储明文凭证。你可以把私钥理解成一把物理钥匙,公钥就是锁芯模具——模具可以随便发给任何人(比如贴在GitHub个人主页),但只有你手里的真钥匙才能开锁。这种非对称加密机制基于RSA、ECDSA或Ed25519等数学难题,目前没有已知的实用破解方法。我曾用Wireshark抓包对比过两种登录方式的网络行为:密码登录时,SSH协议层会明确携带SSH_MSG_USERAUTH_REQUEST类型的数据包,其中包含用户名和密码字段;而密钥登录时,只看到大量SSH_MSG_USERAUTH_REQUESTSSH_MSG_USERAUTH_PK_OK的交互,完全不出现任何敏感字符串。这就是为什么金融级系统、云厂商控制台、甚至Kubernetes集群的kubeconfig默认都强制要求密钥认证——它不是为了炫技,而是把攻击面从“穷举密码”压缩到“物理窃取私钥”这个几乎不可行的维度。

2.2 三种主流密钥算法怎么选?RSA/ECDSA/Ed25519实战对比

ssh-keygen支持多种密钥类型,但新手常被-t rsa-t ecdsa-t ed25519搞晕。这不是版本迭代的简单升级,而是数学基础、性能、兼容性的综合权衡。我们来拆解真实场景下的选择逻辑:

  • RSA(Rivest–Shamir–Adleman):最老牌,兼容性无敌。从OpenSSH 2.0开始就支持,连十年前的嵌入式Linux设备、老款路由器固件都能识别。但它的密钥长度必须足够长才安全——2048位已显疲态,4096位才是当前推荐底线。我测试过:在树莓派Zero W上生成4096位RSA密钥耗时约12秒,而同等安全强度的Ed25519只需0.3秒。这意味着在资源受限环境(如IoT网关、边缘计算节点),RSA可能成为瓶颈。

  • ECDSA(Elliptic Curve Digital Signature Algorithm):基于椭圆曲线,256位密钥强度≈3072位RSA,体积小、速度快。但它有个致命软肋:随机数生成器(RNG)质量直接影响安全性。2012年索尼PS3私钥泄露事件就是ECDSA RNG缺陷导致的。虽然现代Linux内核的/dev/urandom已很可靠,但如果你的服务器运行在虚拟化环境(如VMware ESXi、KVM),RNG熵池不足仍可能埋雷。我曾遇到某客户用ECDSA密钥部署K8s集群,结果在高并发Pod启动时因熵耗尽导致密钥签名失败,错误日志里全是sign_and_send_pubkey: signing failed: agent refused operation

  • Ed25519(Edwards-curve Digital Signature Algorithm):目前公认最优解。它用的是扭曲爱德华兹曲线,抗侧信道攻击能力强,密钥固定为256位(无需纠结长度),生成速度比RSA快40倍,签名验证快2倍。OpenSSH 6.5+原生支持,覆盖99%的现代Linux发行版。唯一限制是极少数老旧系统(如RHEL 6.x、CentOS 6)不支持——但这类系统本身已停止安全更新,本就不该用于生产环境。我的实操建议非常明确:新项目一律用-t ed25519,存量RSA密钥无需主动更换,但新增设备必须切到Ed25519。命令就是一句:ssh-keygen -t ed25519 -C "your_email@example.com"。那个-C参数加的邮箱不是必须的,但它会写进公钥末尾作为注释,当你管理几十台服务器时,一眼就能看出id_ed25519.pub对应的是哪台机器的密钥。

2.3 密钥存储路径与权限设计:为什么~/.ssh必须是700?

ssh-keygen默认把密钥存到~/.ssh/id_rsa(或id_ed25519),这个路径不是随意定的。OpenSSH客户端在连接时会按固定顺序扫描密钥文件:先找~/.ssh/id_rsa,再找id_ecdsaid_ed25519,最后才轮到id_dsa。如果你把密钥放到/tmp/mykey,除非显式用-i /tmp/mykey指定,否则SSH根本不会用它。更关键的是权限控制——这是新手栽跟头最多的地方。我见过太多人执行chmod 777 ~/.ssh想“方便访问”,结果SSH直接拒绝加载密钥,报错Permissions for '/home/user/.ssh/id_rsa' are too open。原因在于OpenSSH的安全策略:私钥文件权限不能高于600(即仅属主可读写),.ssh目录权限不能高于700(仅属主可读写执行)。这是硬性规定,不是警告。为什么这么严?因为私钥一旦被同服务器其他用户读取,就等于把家门钥匙放在公共走廊。Linux通过stat系统调用检查文件元数据,只要发现权限宽松,立即中止认证流程。你可以用ls -ld ~/.sshls -l ~/.ssh/id_*验证当前权限。修复命令就两句:chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_*。注意:chmod 600必须精确到私钥文件,不能只改目录;chmod 700必须精确到.ssh目录,不能改成755。这个细节我在带新人时反复强调:权限不是“能用就行”,而是“必须卡死”

3. 核心操作步骤与关键参数详解

3.1 生成密钥对:从零创建id_ed25519id_ed25519.pub

现在我们动手生成密钥。打开终端,执行以下命令(请逐字敲,不要复制粘贴,因为交互式提示需要你手动确认):

ssh-keygen -t ed25519 -C "your_real_email@company.com"

这里每个参数都有明确意图:

  • -t ed25519:指定密钥类型为Ed25519,这是当前最安全高效的选择;
  • -C:添加注释(Comment),通常填邮箱。这个字符串会追加到公钥末尾,比如ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... your_real_email@company.com。它不参与加密,纯属标识用途,但强烈建议填写真实邮箱——当你在GitHub、GitLab配置Deploy Key时,平台会用这个邮箱关联密钥来源;
  • 不加-f参数:让ssh-keygen使用默认路径~/.ssh/id_ed25519。如果你指定-f /path/to/key,后续所有操作都要同步修改路径,容易出错。

执行后你会看到:

Generating public/private ed25519 key pair. Enter file in which to save the key (/home/username/.ssh/id_ed25519):

直接回车,接受默认路径。接着:

Enter passphrase (empty for no passphrase):

这里要重点说明:是否设置密码短语(passphrase)是安全与便利的终极权衡。不设密码,私钥文件本身就能直接用于认证,适合自动化脚本(如Jenkins定时任务);但一旦私钥文件泄露,攻击者立刻获得无密码登录权限。设密码,每次使用私钥前都要输入密码,安全系数飙升,但牺牲了便捷性。我的折中方案是:个人开发机设密码,生产服务器部署密钥不设密码,但通过ssh-agent统一管理。如果你决定设密码,现在就输入两次(终端不会显示字符,这是正常现象)。最后:

Your identification has been saved in /home/username/.ssh/id_ed25519. Your public key has been saved in /home/username/.ssh/id_ed25519.pub. The key fingerprint is: SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz01234567890123456 your_real_email@company.com The key's randomart image is: +--[ED25519 256]--+ | .o. | | o o. | | . + . | | . = = . | | . S B = . | | = B O o | | . * = + | | o o . | | . | +-----------------+

看到这个ASCII艺术画,说明密钥生成成功。现在验证文件是否存在:

ls -l ~/.ssh/id_ed25519*

你应该看到两行输出:

-rw------- 1 username username 411 Jan 15 10:30 /home/username/.ssh/id_ed25519 -rw-r--r-- 1 username username 102 Jan 15 10:30 /home/username/.ssh/id_ed25519.pub

注意权限:私钥是600(-rw-------),公钥是644(-rw-r--r--),这是正确状态。如果权限不对,立刻执行chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub

3.2 分发公钥到远程服务器:ssh-copy-id的原理与替代方案

生成密钥只是第一步,要把公钥告诉远程服务器,让它知道“这个人可以用这把钥匙开门”。最傻瓜的方式是手动复制粘贴:

# 在本地执行,查看公钥内容 cat ~/.ssh/id_ed25519.pub

然后登录远程服务器,把输出的整段内容(以ssh-ed25519 AAAA...开头,到邮箱结尾)追加到~/.ssh/authorized_keys

# 在远程服务器执行 mkdir -p ~/.ssh echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... your_real_email@company.com" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

但这种方式效率低、易出错(比如多空格、少换行)。ssh-copy-id就是为此而生的自动化工具。它的本质是:用密码登录一次远程服务器,然后自动执行上述mkdir、echo、chmod全套操作。用法极其简单:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
  • -i:指定要上传的公钥文件路径;
  • user@remote_host:目标服务器的用户名和地址,格式和ssh命令完全一致。

执行时它会:

  1. 尝试用密码登录user@remote_host
  2. 登录成功后,在远程执行umask 077; mkdir -p .ssh; cat >> .ssh/authorized_keys
  3. 把本地公钥内容追加到authorized_keys末尾;
  4. 自动设置.ssh目录和authorized_keys文件权限。

ssh-copy-id有三个隐藏前提必须满足:

  • 远程服务器必须安装openssh-serversshd服务正在运行;
  • 远程用户的家目录必须可写(/home/user不能是只读挂载);
  • 远程服务器的/etc/ssh/sshd_configPubkeyAuthentication yes必须启用(默认开启)。

如果ssh-copy-id失败,别急着重试,先用基础命令诊断:

# 检查远程SSH服务是否可达 nc -zv remote_host 22 # 检查远程是否允许公钥认证 ssh -o PubkeyAuthentication=no user@remote_host 'echo "密码登录成功"' ssh -o PasswordAuthentication=no user@remote_host 'echo "公钥登录测试"'

第一个命令应返回Connection succeeded,第二个应成功打印消息,第三个若报错Permission denied (publickey),说明公钥认证未启用,需联系管理员修改/etc/ssh/sshd_config并重启sshd

3.3 验证密钥登录:从密码登录切换到无密码登录的实测过程

公钥上传后,必须立即验证是否生效。切记:不要直接关闭密码登录!先开一个新终端窗口,用密钥方式连接:

ssh -i ~/.ssh/id_ed25519 user@remote_host
  • -i:显式指定私钥文件。虽然~/.ssh/id_*是默认路径,但加-i能排除路径猜测错误;
  • 如果之前设了passphrase,此时会提示输入密码(不是服务器密码,是私钥的密码);
  • 如果没设passphrase,应该直接进入shell,不出现密码提示。

成功登录后,立刻检查关键文件:

# 确认authorized_keys内容正确 cat ~/.ssh/authorized_keys # 检查权限是否合规 ls -ld ~/.ssh ls -l ~/.ssh/authorized_keys

你应该看到authorized_keys里有你刚上传的那行公钥,且权限是600。如果权限是644,SSH会静默忽略该密钥,导致后续连接仍要输密码。

接下来测试无密码登录的稳定性。关闭当前SSH会话,新开终端:

ssh user@remote_host

这次不加-i参数,让SSH自动查找默认密钥。如果直接登录成功,说明配置完成。如果仍要输密码,请按以下顺序排查:

  1. 执行ssh -v user@remote_host(加-v开启详细日志),观察日志中是否有Offering public keyServer accepts key等字样;
  2. 检查远程服务器/var/log/auth.log(Ubuntu/Debian)或/var/log/secure(CentOS/RHEL),搜索Failed passwordAuthentication refused
  3. 确认远程sshd_configAuthorizedKeysFile .ssh/authorized_keys未被注释或修改。

一旦验证成功,就可以考虑禁用密码登录提升安全性。编辑远程服务器的/etc/ssh/sshd_config

# 找到这两行,取消注释并改为no PasswordAuthentication no PermitRootLogin no

然后重启服务:sudo systemctl restart sshd(Ubuntu/Debian)或sudo systemctl restart sshd(CentOS/RHEL)。但务必确保你至少有两个可用的密钥登录方式(比如另一台机器也有相同公钥),否则可能把自己锁在外面

4. 实战排障与高频问题速查表

4.1 “Permission denied (publickey)”:90%的密钥登录失败都源于这五个环节

这个错误是SSH密钥领域最经典的“拦路虎”,表面看是认证失败,实际原因分散在客户端、网络、服务端三个层面。我整理了真实环境中出现频率最高的五类根因,按排查顺序排列:

排查环节具体表现快速验证命令解决方案
客户端私钥权限错误Warning: Unprotected private key filels -l ~/.ssh/id_*chmod 600 ~/.ssh/id_*
服务端authorized_keys权限错误日志中Authentication refused: bad ownership or modesls -l ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys
服务端.ssh目录权限错误同上,或Could not open authorized keys filels -ld ~/.sshchmod 700 ~/.ssh
公钥未正确写入authorized_keyssshd日志显示Found matching key: ... but key is not in authorized_keyscat ~/.ssh/authorized_keys | wc -l重新执行ssh-copy-id或手动追加
sshd_config禁用了公钥认证sshd日志显示PubkeyAuthentication is disabledsudo grep PubkeyAuthentication /etc/ssh/sshd_config修改为yes并重启sshd

特别提醒一个隐蔽陷阱:authorized_keys文件末尾必须有换行符。如果用echo "key" > ~/.ssh/authorized_keys(单大于号),会覆盖原文件且不加换行;而echo "key" >> ~/.ssh/authorized_keys(双大于号)会在末尾追加并自动换行。我曾帮客户处理过一次故障:他们用脚本批量部署密钥,脚本里写的是>,结果所有服务器的authorized_keys最后一行都是ssh-ed25519 ... email紧贴文件末尾,导致SSH解析失败。修复方法很简单:echo "" >> ~/.ssh/authorized_keys

4.2 VS Code Remote-SSH连接失败的专项诊断

VS Code的Remote-SSH插件极大提升了开发体验,但配置不当会导致各种奇怪错误。最常见的三个报错及对策:

  • Could not establish connection to "xxx"
    这通常是网络层问题。先确认基础连通性:在VS Code内置终端执行ping remote_hosttelnet remote_host 22。如果telnet失败,检查防火墙(sudo ufw status)、云服务器安全组(阿里云/腾讯云控制台)、或本地网络策略(公司IT部门可能屏蔽22端口)。如果是WSL环境,确保Windows防火墙未阻止wsl.exe

  • Error: Failed to fetch remote environment
    这表示SSH连接成功,但VS Code无法在远程执行初始化脚本。常见原因是远程Shell配置异常。检查远程服务器的~/.bashrc~/.zshrc,删除或注释掉所有可能阻塞输出的命令,比如echo "Welcome"neofetch、或未加[ -t 0 ] &&保护的交互式命令。VS Code需要干净的Shell环境来加载扩展。

  • The process tried to write to a nonexistent pipe
    这是Windows端SSH客户端的老毛病。解决方案是强制VS Code使用OpenSSH而非内置客户端:在VS Code设置中搜索remote.ssh.path,将其值设为C:\Windows\System32\OpenSSH\ssh.exe(Windows 10 1809+自带),然后重启VS Code。

另外,VS Code的SSH配置文件~/.ssh/config要规范。一个典型配置如下:

Host my-server HostName 192.168.1.100 User deploy IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes

其中IdentitiesOnly yes至关重要——它告诉SSH“只用我指定的密钥,不要尝试其他默认密钥”,避免因多密钥冲突导致认证失败。

4.3 跨局域网与NAT穿透场景下的密钥配置要点

当远程服务器不在同一局域网(比如家里的树莓派、公司内网的测试机),而你在外网咖啡馆连接时,会遇到NAT穿透问题。此时密钥本身不受影响,但连接方式要调整:

  • 端口映射(Port Forwarding):在路由器后台将外网IP的某个端口(如2222)映射到内网服务器的22端口。然后用ssh -p 2222 user@your_public_ip连接。注意:公网IP可能是动态的,建议搭配DDNS服务(如花生壳)。

  • 反向SSH隧道(Reverse SSH Tunnel):如果无法配置路由器(如公司网络),可在内网服务器上主动连出一条隧道到公网VPS:

    # 在内网服务器执行(假设VPS IP为1.2.3.4) ssh -R 2222:localhost:22 user@1.2.3.4

    然后在外网通过ssh -p 2222 user@1.2.3.4间接访问内网服务器。此时密钥仍有效,只是多了一层代理。

  • Cloudflare Tunnel:对于Web服务,Cloudflare免费提供TCP隧道,但SSH需付费套餐。更轻量的方案是chiselfrp,它们用HTTP协议封装SSH流量,能绕过大部分企业防火墙。

无论哪种方式,密钥的生成、分发、验证流程完全不变。唯一变化的是ssh命令的HostNamePort参数。我建议把不同网络环境的配置写进~/.ssh/config,用Host别名隔离:

# 家里局域网 Host home-lan HostName 192.168.1.100 User pi # 公司内网(通过跳板机) Host company-internal HostName 10.0.1.50 User dev ProxyJump jump-host # 外网VPS Host vps-prod HostName 1.2.3.4 User root Port 2222

这样ssh home-lanssh company-internalssh vps-prod就能一键切换,密钥自动匹配。

5. 进阶技巧与生产环境最佳实践

5.1 用ssh-agent管理多密钥:告别重复输入passphrase

如果你为不同服务器设置了不同passphrase,每次连接都要输密码,体验极差。ssh-agent就是SSH的“密码保险箱”——它在内存中缓存解密后的私钥,后续连接直接复用,无需重复输入。启动和使用流程如下:

首先启动agent(通常登录时自动启动,但可手动确认):

# 检查是否已有agent进程 env | grep SSH_AGENT_PID # 若无,手动启动 eval $(ssh-agent -s)

然后把私钥添加到agent:

ssh-add ~/.ssh/id_ed25519

如果私钥有passphrase,此时会提示输入一次。添加成功后,ssh-add -l会列出所有已加载的密钥指纹。

为了让agent在终端会话间持久化,需配置shell启动文件。在~/.bashrc~/.zshrc末尾添加:

# 如果没有运行中的agent,则启动它 if [ -z "$SSH_AUTH_SOCK" ]; then eval $(ssh-agent -s) > /dev/null fi # 自动加载默认密钥(如果尚未加载) ssh-add -l > /dev/null || ssh-add ~/.ssh/id_ed25519 > /dev/null 2>&1

这样每次打开新终端,agent自动运行并加载密钥。注意:ssh-add默认只加载~/.ssh/id_rsaid_ecdsaid_ed25519,所以命名必须规范。

5.2 Git与GitHub的SSH密钥绑定:从生成到验证的完整链路

开发者最常接触的SSH场景就是Git。把本地密钥关联到GitHub,能实现git clone git@github.com:user/repo.git的无缝操作。步骤如下:

  1. 生成密钥(如果还没做):ssh-keygen -t ed25519 -C "your_github_email@example.com"

  2. 启动ssh-agent并添加密钥eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_ed25519

  3. 复制公钥到剪贴板cat ~/.ssh/id_ed25519.pub | clip.exe(Windows)或pbcopy < ~/.ssh/id_ed25519.pub(macOS)或xclip -sel clip < ~/.ssh/id_ed25519.pub(Linux)

  4. 在GitHub网页端添加:Settings → SSH and GPG keys → New SSH key → 粘贴公钥内容,Title填Work Laptop之类有意义的名字

  5. 验证连接ssh -T git@github.com。如果返回Hi username! You've successfully authenticated...,说明绑定成功。

关键注意事项:

  • GitHub只认公钥,私钥必须严格保密;
  • 如果你用多个GitHub账号(工作/个人),必须为每个账号生成独立密钥,并在~/.ssh/config中为不同Host指定不同IdentityFile;
  • git@github.com是固定域名,不能替换成你的用户名,这是GitHub的SSH服务入口。

5.3 国产Linux系统(UOS/麒麟)的SSH密钥适配要点

统信UOS和银河麒麟作为主流国产操作系统,底层仍是Linux内核+OpenSSH,密钥流程完全一致。但有三个国产化环境特有的细节需注意:

  • 默认Shell差异:UOS默认用zsh,麒麟用bash。确保~/.zshrc~/.bashrc中正确配置了ssh-agent,否则新终端无法继承密钥。

  • 安全加固策略:部分政务版麒麟启用了SELinux或国密算法模块。如果ssh-copy-id失败,先检查sestatus,临时设为permissive模式测试:sudo setenforce 0。若确认是SELinux导致,需用restorecon -Rv ~/.ssh恢复上下文。

  • 图形界面集成:UOS的控制中心有“远程桌面”设置,但那是VNC/RDP协议,和SSH无关。SSH密钥仍需命令行操作。不过UOS预装了openssh-clientopenssh-server,无需额外安装。

我曾在某省级政务云项目中部署过200+台麒麟V10服务器,全部用Ed25519密钥统一管理。经验是:国产系统不是“另起炉灶”,而是“标准Linux+安全增强”,所有SSH最佳实践完全适用。唯一要做的,是把apt install openssh-server换成sudo apt install openssh-server(UOS)或sudo yum install openssh-server(麒麟),其余命令一字不差。

提示:在生产环境,永远保留一份密码登录的备用通道。可以在/etc/ssh/sshd_config中为特定IP段(如运维跳板机IP)开启密码认证:Match Address 10.0.0.0/8+PasswordAuthentication yes。这样既保证主力密钥登录,又留有紧急救援入口。

注意:ssh-copy-id在某些精简版Linux(如Alpine、Docker容器)中默认不安装。此时必须手动执行ssh user@host "mkdir -p ~/.ssh && echo 'PUBLIC_KEY_CONTENT' >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"。注意单引号包裹整个命令,避免本地Shell提前解析变量。

实操心得:我习惯在生成密钥时用-f指定带项目名的文件,比如ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "work@company.com"。这样~/.ssh/目录下会有id_ed25519_workid_ed25519_work.pub,和id_ed25519_personal分开。配合~/.ssh/configIdentityFile指令,彻底避免密钥混淆。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询