首页 > 解决方案 > 适用于 Linux 的 Windows 子系统中使用的 Ansible 的 SSH 私钥格式(使用 PuttyGen 生成密钥对)

问题描述

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

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

我通过使用 puttygen 导出私钥生成了私钥。用“强制新文件格式”
导出它后,我得到了

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
}

主机文件的内容:

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-----

如果使用“强制新文件格式”导出,就像这样

-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

知道我做错了什么吗?

标签: ansiblessh-keyswindows-subsystem-for-linux

解决方案


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

  1. 在 PuttyGen 中加载您的私钥文件(或生成一个)
    • 如果有密码,请删除!
  2. 菜单转换->导出 OpenSSH 密钥
    • 不是“强制新文件格式”
    • 这会问你“你确定不用密码保存吗?” -> 是的

那是您可以在 ansible.xml 中使用的文件。


其余的与腻子无关。

  • 您可以在/mnt /hd/path/to/file.pem的 Linux 子系统中找到生成的密钥文件
  • 例如将其复制到 ~/.ssh/yourkeyfile
  • chmod 400 ~/.ssh/yourkeyfile仅使其用户可读。否则,ansible 将无法连接并显示“要求您的私钥文件不能被其他人访问。此私钥将被忽略。”

在您的库存/主机文件中,例如:

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

推荐阅读