虚拟机钥密就是SSH密钥对,由公钥和私钥组成,设置时把公钥放进虚拟机,私钥保存在本地,管理重点是私钥权限控制和定期轮换。
虚拟机钥密是什么?底层原理与常见误区
虚拟机钥密通常指SSH密钥对,包含一把公钥和一把私钥,公钥可以放心放在虚拟机的~/.ssh/authorized_keys文件里,私钥必须只留在你自己的电脑上,两者通过非对称加密算法配对,私钥能证明身份,公钥能验证身份。
登录过程像一个握手:服务器发来一段随机数据,客户端用私钥签名,服务器用公钥验签,签名正确则放行,这一过程不传输私钥,也不传输密码,因此天然比密码登录更抗暴力破解。
虚拟机钥密和密码登录哪个安全?对比分析
这个问题在百度搜索量不低,多数运维新人都有困惑,直接看对比:
| 对比维度 | 密码登录 | 密钥登录 |
|---|---|---|
| 认证原理 | 共享同一串字符 | 非对称加密,公私钥分离 |
| 暴力破解风险 | 高,常见扫描攻击 | 极低,几乎无法在合理时间破解 |
| 泄露影响 | 密码被猜中即可登录 | 需同时获取私钥文件和私钥口令 |
| 管理成本 | 定期改密、记复杂密码 | 每次轮换只需替换公钥 |
| 适用场景 | 临时测试、应急通道 | 生产环境、自动化运维 |
结论很明确:密钥登录更安全,但私钥保护是前提。 如果私钥文件权限设为644,又没加口令,等于把钥匙挂在门上。
常见误区
- 把私钥上传到代码仓库、网盘或聊天群
- 给多个同事共享同一把私钥
- 用纯数字或生日作为私钥口令
- 将私钥放在虚拟机系统盘里,重装系统就丢失
- 认为公钥可以随便发、不用管,结果把私钥当公钥发出去
如何设置虚拟机钥密?云服务器与本地虚拟机场景
设置虚拟机钥密分两步:先生成密钥对,再把公钥放进虚拟机,云服务器和本地虚拟机操作略有不同。
生成密钥对的命令与格式说明
在本地电脑打开终端(macOS/Linux)或PowerShell(Windows 10以上自带OpenSSH):
ssh-keygen -t ed25519 -C "备注信息"
这条命令会生成两把钥匙,默认路径为:
- 私钥:
~/.ssh/id_ed25519 - 公钥:
~/.ssh/id_ed25519.pub
如果需要兼容老旧系统,可以用RSA类型:
ssh-keygen -t rsa -b 4096 -C "备注信息"
生成过程中会询问保存位置和私钥口令,口令建议设置,长度不低于8位,最好包含大小写字母和数字,不要贪图方便留空。
云服务器SSH密钥登录设置步骤
以常见的云服务器(简米云、酷番云、华为云等)为例,Linux系统通用。
控制台创建密钥对:
- 在云控制台找到“密钥对”或“SSH密钥”功能
- 点击创建,系统生成密钥对,并自动下载私钥文件(一般是
.pem格式) - 创建云服务器实例时,登录方式选择“密钥对”,并选中刚创建的密钥
- 系统会自动把公钥注入到服务器
/root/.ssh/authorized_keys或指定用户的~/.ssh/authorized_keys
本地使用私钥登录:
ssh -i /path/to/private_key.pem root@服务器公网IP
首次登录如果提示权限问题,执行:
chmod 400 /path/to/private_key.pem
已有云服务器手动添加公钥:
在本地执行:
ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@服务器IP
或者手动复制公钥内容,登录服务器后执行:
mkdir -p ~/.ssh chmod 700 ~/.ssh echo "公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
本地虚拟机密钥配置场景:VMware/VirtualBox怎么操作
本地虚拟机没有云控制台,需要手动完成公钥注入,以VirtualBox安装Ubuntu为例:
- 先在宿主机生成密钥对,命令同上
- 启动虚拟机,登录系统,创建
.ssh目录:
mkdir -p ~/.ssh chmod 700 ~/.ssh
- 把宿主机公钥内容复制到虚拟机,可以挂载共享文件夹,也可以先通过密码登录,然后执行:
ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@虚拟机IP
- 编辑SSH配置文件确认密钥认证开启:
sudo vim /etc/ssh/sshd_config
确保以下两行存在且未被注释:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
- 如需禁用密码登录,可设置:
PasswordAuthentication no
但务必先用密钥测试登录成功,再禁用密码,最后重启SSH服务:
sudo systemctl restart sshd
如何管理虚拟机钥密?权限、轮换与多用户场景
设置完成后,管理才是日常重点,管不好私钥,等于没设密钥。
私钥文件权限设置与保管
- Linux/macOS下私钥权限必须是600:
chmod 600 ~/.ssh/id_ed25519
- Windows下避免存放在公共共享目录,建议放在
C:\Users\你的用户名\.ssh\下 - 私钥口令不要和登录密码相同
- 私钥文件不要改名为
.txt发邮件 - 公钥可以公开,但不要和私钥放在同一目录混淆
定期轮换密钥的步骤
行业共识认为,密钥对每6到12个月轮换一次比较合理,轮换流程如下:
- 在本地生成新密钥对:
ssh-keygen -t ed25519 -f ~/.ssh/new_key_2026 -C "rotation"
- 把新公钥追加到服务器:
cat ~/.ssh/new_key_2026.pub | ssh 用户名@服务器IP "cat >> ~/.ssh/authorized_keys"
- 用新私钥测试登录:
ssh -i ~/.ssh/new_key_2026 用户名@服务器IP
- 登录成功后,编辑服务器
~/.ssh/authorized_keys,删除旧公钥行 - 本地删除旧私钥文件,更新脚本或SSH配置中的路径
多用户密钥管理与地域服务器注意事项
多用户环境不要共用一把私钥。每个开发者生成自己的密钥对,管理员只收集公钥。 在服务器上为每个用户创建独立系统账号,把对应公钥加入各自~/.ssh/authorized_keys,吊销某人的访问权限时,只需删除其公钥行,不影响其他人。
地域服务器方面,云服务器密钥对通常带有地域属性,比如在北京云服务器密钥管理中创建的密钥对,不能在上海地域直接使用,据云服务商公开文档,密钥对创建后仅限当前地域,跨地域需要重新创建或手动导入公钥,这是很多运维在迁移服务器时容易忽略的细节。
虚拟机密钥对收费吗?价格与成本说明
很多用户搜索“虚拟机密钥对收费吗”,这里明确回答:密钥对本身完全免费。 无论是简米云、酷番云、华为云还是AWS,创建密钥对不产生任何费用,本地虚拟机使用密钥登录更是零成本。
所谓的“价格”通常指云服务器实例、云硬盘、公网带宽等资源的费用,密钥对只是登录工具,不单独计费,不要被部分服务商页面上的“价格”栏目误导,那个价格对应的是服务器套餐,不是密钥功能。
虚拟机钥密的管理其实就四件事:公钥进虚拟机,私钥自己保管,权限设为600,按时轮换,把这几条做到位,比密码登录安全一个量级,也不增加多少维护成本。
Q&A:虚拟机钥密相关常见问题
虚拟机钥密忘了怎么办?
如果私钥文件丢失,或者私钥口令忘记,无法再通过原私钥登录,云服务器可以通过控制台的VNC或救援模式进入系统,重新添加公钥,本地虚拟机可以用单用户模式或Live CD挂载系统盘,修改authorized_keys,如果既没有密码也没有控制台入口,只能重装系统。
虚拟机钥密和密码可以同时使用吗?
可以,SSH默认允许两种方式并存,但生产环境多数会禁用密码登录,只保留密钥,如果某些老设备不支持密钥认证,可以临时开启密码,用完再关闭,修改/etc/ssh/sshd_config中的PasswordAuthentication即可切换。
虚拟机钥密如何删除?
删除密钥登录分两步:从服务器~/.ssh/authorized_keys文件中删除对应公钥行;本地删除对应私钥文件,如果是云服务器控制台创建的密钥对,还需要在控制台解绑并删除该密钥对,前提是当前没有实例正在使用它。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/635642.html


