在 MacOS Mojave 上创建无需密码的 SSH 密钥

在 MacOS Mojave 上创建无需密码的 SSH 密钥

多年来,我一直使用这样的方式自动创建无需密码的 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.8p1MacOS Mojave 10.14.2OpenSSH_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>

相关内容