Windows Linux 子系统中使用的 Ansible 的 SSH 私钥格式(使用 PuttyGen 生成密钥对)

SSH private key format for Ansible used in Windows Subsystem for Linux (using PuttyGen to generate the key pair)

我尝试 learn/use Ansible 来设置我的新服务器。控制机是 Windows PC。我在 Linux 的 Windows 子系统中使用 Debian,并成功安装了 ansible。 我可以使用带有(密码保护)私钥的腻子连接到服务器(真正的 Debian)(我在创建时将 public 密钥复制到服务器(它是 Hetzner 云服务器))。 但是当我尝试 运行 ansible -m ping all 我得到

server5 | UNREACHABLE! => {
    "changed": false,
    "msg": "not a valid OPENSSH private key file",
    "unreachable": true
}

我用 puttygen 导出生成了私钥。
用 "force new file format" 导出后 我得到了

server5 | UNREACHABLE! => {
    "changed": false,
    "msg": "Invalid/incorrect username/password. Private key file is encrypted",
    "unreachable": true
}

所以我生成了一个没有密码的私钥文件,看看是否有帮助。此私钥也适用于 putty 但 ansible 打印:

server5 | UNREACHABLE! => {
    "changed": false,
    "msg": "Invalid key",
    "unreachable": true
}

hosts文件内容:

server5 ansible_host=xxx.xx.xx.xx ansible_user=root ansible_ssh_private_key_file=prikey.pem

密钥文件如下所示

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

如果使用 "force new file format"

导出,则像这样
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

知道我哪里做错了吗?

必要步骤使用星座Ansible、WinSubSystemLinux和Putty

  1. 在 PuttyGen 中加载您的私钥文件(或生成一个)
    • 如果有,请删除密码!
  2. 菜单转换->导出 OpenSSH 密钥
    • 不是"force new file format"
    • 这会问你 "are you sure to save without password?" -> 是

这是你可以在 ansible 中使用的文件。


其余与putty无关

  • 您可以在 Linux 子系统中找到生成的密钥文件,位于 /mnt/hd/path/to/file.pem
  • 例如复制到~/.ssh/yourkeyfile
  • chmod 400 ~/.ssh/yourkeyfile 仅让您的用户可读。否则,ansible 将无法连接显示 "It is required that your private key files are NOT accessible by others. This private key will be ignored."

在您的 inventory/hosts 文件中,例如:

serverx ansible_host=xxx.xxx.xxx.xxx ansible_ssh_private_key_file=~/.ssh/yourkeyfile