多年来,我一直使用这样的方式自动创建无需密码的 SSH 密钥对:
/usr/bin/ssh-keygen -q -b 1024 -N "" -C "vagrant@labman01" -f keys/labkey
我通常从 Ansible 游戏中调用 ssh-keygen,然后在创建实验室环境时继续将密钥提供给许多 vagrant 客户机器。
但是,自从升级到 MacOS Mojave (10.14.2) 后,生成的密钥后来被 Linux 客户机上的 Ansible 报告为无效,并且尝试在 Linux 客户机上手动使用该密钥会导致提示输入密码,就好像私钥受密码保护一样。
但是,在任何 Linux 主机上执行相同操作都会创建一个有效的密钥。
是否有一些新技巧可以在 MacOS Mojave 上生成有效、免密码的密钥对?
更新
检查生成的密钥文件时,我注意到 MacOS Mojave 使用-----BEGIN OPENSSH PRIVATE KEY-----
而不是-----BEGIN RSA PRIVATE KEY-----
作为 PEM 标头。页脚也是如此。
OpenSSH 7.8 及更高版本中的密钥格式似乎有所变化。仅更改标头并不能解决问题。
答案1
及更高版本中的默认密钥文件格式似乎发生了变化OpenSSH_7.8p1
。MacOS Mojave 10.14.2
OpenSSH_7.9p1
添加后,将改变使用旧式 PEM 私钥格式-m PEM
的行为,这是以前的 Mac OS 版本中的默认格式。ssh-keygen
/usr/bin/ssh-keygen -q -m PEM -b 1024 -N "" -C "vagrant@labman01" -f keys/labkey
不幸的是,早期版本的 OpenSSH 不支持 -m 选项,因此必须维护特定版本的代码以支持较旧的操作系统版本。
答案2
您可以尝试使用非空密码生成密钥,然后将密码设置为空:
ssh-keygen -b 2048 -t rsa -q -N "password" -f <your_key_file>
ssh-keygen -p -P "password" -N "" -f <your_key_file>
如果标题有误,您可以尝试更改文本:
sed -i -e 's/OPENSSH/RSA/' <your_key_file>