考虑上传 ssh 密钥的 Ansible 任务的以下问题:
File "/home/foo/.ansible/tmp/ansible-tmp-1539175437.69-201636907966313/AnsiballZ_cs_sshkeypair.py", line 113, in <module>
_ansiballz_main()
File "/home/foo/.ansible/tmp/ansible-tmp-1539175437.69-201636907966313/AnsiballZ_cs_sshkeypair.py", line 105, in _ansiballz_main
invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
File "/home/foo/.ansible/tmp/ansible-tmp-1539175437.69-201636907966313/AnsiballZ_cs_sshkeypair.py", line 48, in invoke_module
imp.load_module('__main__', mod, module, MOD_DESC)
File "/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py", line 267, in <module>
File "/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py", line 258, in main
File "/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py", line 133, in register_ssh_key
File "/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py", line 211, in get_ssh_key
File "/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py", line 227, in _get_ssh_fingerprint
File "/usr/local/lib/python2.7/dist-packages/sshpubkeys/keys.py", line 157, in hash_md5
fp_plain = hashlib.md5(self._decoded_key).hexdigest()
TypeError: md5() argument 1 must be string or buffer, not None
fatal: [localhost]: FAILED! => {
"changed": false,
"module_stderr": "Traceback (most recent call last):\n File \"/home/foo/.ansible/tmp/ansible-tmp-1539175437.69-201636907966313/AnsiballZ_cs_sshkeypair.py\", line 113, in <module>\n _ansiballz_main()\n File \"/home/foo/.ansible/tmp/ansible-tmp-1539175437.69-201636907966313/AnsiballZ_cs_sshkeypair.py\", line 105, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File \"/home/foo/.ansible/tmp/ansible-tmp-1539175437.69-201636907966313/AnsiballZ_cs_sshkeypair.py\", line 48, in invoke_module\n imp.load_module('__main__', mod, module, MOD_DESC)\n File \"/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py\", line 267, in <module>\n File \"/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py\", line 258, in main\n File \"/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py\", line 133, in register_ssh_key\n File \"/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py\", line 211, in get_ssh_key\n File \"/tmp/ansible_cs_sshkeypair_payload_Jb1ZG5/__main__.py\", line 227, in _get_ssh_fingerprint\n File \"/usr/local/lib/python2.7/dist-packages/sshpubkeys/keys.py\", line 157, in hash_md5\n fp_plain = hashlib.md5(self._decoded_key).hexdigest()\nTypeError: md5() argument 1 must be string or buffer, not None\n",
"module_stdout": "",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}
虽然存在 ssh 密钥,但这似乎是一些错误,因为md5()
可能会丢失参数。
无法以这种形式准确地将其识别为已知问题。
Python 2.x 和 3.x 都会出现这个问题。(以下适用于 Ubuntu 16.04/18.04 LTS 的 Dockerfiles)。
Ubuntu 16.04 LTS,Python 2
FROM ubuntu:16.04
ENV WORKDIR /work
WORKDIR $WORKDIR
COPY . $WORKDIR/example/
RUN mv example/.ssh/ ~/ && ls -alh ~/.ssh/ && \
apt-get -y update && apt-get -y install software-properties-common && apt-add-repository ppa:ansible/ansible && \
apt-get -y update && \
apt-get -y install python-pip && pip install ansible cs sshpubkeys && \
echo "List installed Python packages:" && pip list && python --version && ansible --version
Ubuntu 18.04 LTS,Python 3
FROM ubuntu:18.04
ENV WORKDIR /work
WORKDIR $WORKDIR
COPY . $WORKDIR/example/
RUN mv example/.ssh/ ~/ && ls -alh ~/.ssh/ && \
apt-get -y update && apt-get -y install software-properties-common && apt-add-repository ppa:ansible/ansible && \
apt-get -y update && \
apt-get -y install python3-pip && pip3 install ansible cs sshpubkeys && \
echo "List installed Python packages:" && pip3 list && python3 --version && ansible --version
系统似乎删除了临时生成的 Python 脚本。是否可以选择保留它们以进行调试?
旁注:example/.ssh/
包含目标系统未知的新 SSH piblic 密钥。
一个假设:虽然最终的动态文件名为AnsiballZ_cs_sshkeypair.py
,但它是否来自 Python cs
(Apache Cloud Stack 绑定)模块?