ansible 无法 ssh 但手动 ssh 成功
Posted
技术标签:
【中文标题】ansible 无法 ssh 但手动 ssh 成功【英文标题】:ansible unable to ssh but manual ssh successful 【发布时间】:2017-01-13 12:10:19 【问题描述】:我正在尝试使用模块 ping 远程主机:ping。我的主机文件如下所示:
[groupA] HostA ansible_connection=ssh ansible_user=userA
命令:ansible -i hosts -m ping all
手动我能够在 HostA 上使用相同的 userA 成功 ssh,但不能通过 ansible
来自 ansible 的调试日志:
没有找到配置文件;使用默认值 加载的回调最小 输入标准输出,v2.0 为用户建立 SSH 连接: userA SSH:EXEC ssh -C -vvv -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=userA -o ConnectTimeout=10 HostA '/bin/sh -c '"'"'( umask 77 && mkdir -p "
echo /tmp/ansible-userB/ansible-tmp-1473143642.15-125405279117948
" && 回声 ansible-tmp-1473143642.15-125405279117948="echo /tmp/ansible-userB/ansible-tmp-1473143642.15-125405279117948
" ) && 睡眠 0'"'"''
来源主机操作系统详情:
LSB 版本: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch 分销商 ID:RedHatEnterpriseServer 描述:Red Hat Enterprise Linux Server 6.8 版(圣地亚哥) 发行版:6.8 代号:圣地亚哥
目标主机操作系统详细信息:
bash-4.1$ lsb_release -a LSB 版本: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch 分销商 ID:RedHatEnterpriseServer 描述:Red Hat Enterprise Linux Server 6.8 版(圣地亚哥) 发行版: 6.8 代号:圣地亚哥
编辑:手动命令:
ssh UserA@HostA
//Some lines of sshing to the remote host
-sh$: hostname -f
HostA
-sh$:
编辑2: 运行 ssh 的输出:EXEC 命令
OpenSSH_5.3p1,OpenSSL 1.0.1e-fips 2013 年 2 月 11 日调试 1:阅读 配置数据 /etc/ssh/ssh_config debug1: 为 * 应用选项 debug2:ssh_connect:needpriv 0 debug1:连接到hostA [IP端口] 端口 22. debug2: fd 3 setting O_NONBLOCK debug1: fd 3 clearing O_NONBLOCK debug1:建立连接。调试3:超时:9924 毫秒 连接调试1后保持:身份文件/home/userB/.ssh/identity type -1 debug1: 身份文件 /home/userB/.ssh/identity-cert type -1 debug3:不是 RSA1 密钥文件 /home/userB/.ssh/id_rsa。调试2: key_type_from_name:未知键类型'-----BEGIN' debug3:key_read: 缺少keytype debug3:key_read:缺少空格debug3:key_read: 缺少空格调试3:key_read:缺少空格调试3: key_read:缺少空格 debug3:key_read:缺少空格 调试3:key_read:缺少空格调试3:key_read:缺少 空白调试3:key_read:缺少空白调试3:key_read: 缺少空格调试3:key_read:缺少空格调试3: key_read:缺少空格 debug3:key_read:缺少空格 调试3:key_read:缺少空格调试3:key_read:缺少 空白调试3:key_read:缺少空白调试3:key_read: 缺少空格调试3:key_read:缺少空格调试3: key_read:缺少空格 debug3:key_read:缺少空格 调试3:key_read:缺少空格调试3:key_read:缺少 空白调试3:key_read:缺少空白调试3:key_read: 缺少空格调试3:key_read:缺少空格调试3: key_read:缺少空格 debug2:key_type_from_name:未知键 键入'-----END' debug3:key_read:缺少keytype debug1:身份 文件 /home/userB/.ssh/id_rsa 类型 1 debug1:身份文件 /home/userB/.ssh/id_rsa-cert type -1 debug1: 身份文件 /home/userB/.ssh/id_dsa type -1 debug1: 身份文件 /home/userB/.ssh/id_dsa-cert type -1 debug1: 身份文件 /home/userB/.ssh/id_ecdsa type -1 debug1: 身份文件 /home/userB/.ssh/id_ecdsa-cert type -1 debug1:远程协议版本 2.0,远程软件版本 OpenSSH_5.3 debug1: match: OpenSSH_5.3 pat OpenSSH* debug1: Enable compatible mode for protocol 2.0 debug1:本地版本字符串 SSH-2.0-OpenSSH_5.3 debug2:fd 3 设置 O_NONBLOCK debug1: SSH2_MSG_KEXINIT sent debug3: Wrote 960 bytes for a 共 981 个 debug1:SSH2_MSG_KEXINIT 收到 debug2: kex_parse_kexinit:调试2:kex_parse_kexinit:调试2: kex_parse_kexinit:调试2:kex_parse_kexinit:调试2: kex_parse_kexinit:调试2:kex_parse_kexinit:调试2: kex_parse_kexinit: zlib@openssh.com,zlib,none debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none debug2: kex_parse_kexinit:调试2:kex_parse_kexinit:调试2: kex_parse_kexinit: first_kex_follows 0 debug2: kex_parse_kexinit: 保留 0 调试2:kex_parse_kexinit:调试2:kex_parse_kexinit: ssh-rsa,ssh-dss debug2:kex_parse_kexinit:debug2:kex_parse_kexinit: 调试2:kex_parse_kexinit:调试2:kex_parse_kexinit:调试2: kex_parse_kexinit:无,zlib@openssh.com 调试2:kex_parse_kexinit: 无,zlib@openssh.com 调试2:kex_parse_kexinit:调试2: kex_parse_kexinit: debug2: kex_parse_kexinit: first_kex_follows 0 debug2:kex_parse_kexinit:保留 0 debug2:mac_setup:找到 hmac-md5调试1:kex:服务器->客户端调试2:mac_setup:找到 hmac-md5调试1:kex:客户端->服务器调试1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024
debug1:可以继续的身份验证:debug3:重新开始,通过 不同的列表 debug3:首选 debug3:authmethod_lookup gssapi-with-mic debug3:剩余首选:debug3: authmethod_is_enabled debug1:下一个认证方法:debug3: 试图反转映射地址 IP 端口。 debug1:未指定的 GSS 失败。次要代码可以提供更多信息凭证缓存 找不到文件“/tmp/krb5cc_”
debug1:未指定的 GSS 故障。次要代码可以提供更多 信息凭证缓存文件 '/tmp/krb5cc_' 未找到
debug1:未指定的 GSS 故障。次要代码可以提供更多 信息
debug1:未指定的 GSS 故障。次要代码可以提供更多 信息凭证缓存文件 '/tmp/krb5cc_' 未找到
debug2:我们没有发送数据包,禁用方法debug3: authmethod_lookup gssapi-keyex debug3:剩余首选:debug3: authmethod_is_enabled gssapi-keyex debug1:下一个身份验证方法: gssapi-keyex debug1:没有有效的密钥交换上下文 debug2:我们没有 发送数据包,禁用方法 debug3: authmethod_lookup publickey debug3: 剩余首选: ,publickey debug3: authmethod_is_enabled publickey debug1: 下一个认证方法:publickey debug1: Trying 私钥:/home/userB/.ssh/identity debug3:没有这样的身份: /home/userB/.ssh/identity debug1:提供公钥: /home/userB/.ssh/id_rsa debug3: send_pubkey_test debug2: 我们发送了一个 publickey 数据包,等待回复 debug3:总共写了 368 个字节 1645 debug1:服务器接受密钥:pkalg ssh-rsa blen 277 debug2: input_userauth_pk_ok:debug3:sign_and_send_pubkey:debug1:读取 PEM private key done: type RSA debug3: Wrote 640 bytes for a total of 2285 debug1:在级别 6 启用压缩。 debug1:身份验证 成功(公钥)。调试1:通道0:新的[客户端会话]调试3: ssh_session2_open:channel_new:0 debug2:通道0:发送打开debug1: 请求 no-more-sessions@openssh.com debug1:进入交互 会议。 debug3:写了112字节,总共2397 debug2:回调 启动调试2:client_session2_setup:id 0 debug2:通道0:请求 pty-req confirm 1 debug1:发送环境。 debug3:忽略环境 debug3:忽略 env debug3:忽略 env MANPATH debug3:忽略 env debug3:忽略 env HOSTNAME debug3:忽略 env ANSIBLE_HOST_KEY_CHECKING debug3:忽略环境 ANSIBLE_SSH_ARGS debug3: 忽略 env debug3:忽略 env TERM debug3:忽略 env SHELL debug3:忽略 env HISTSIZE debug3:忽略 env QTDIR debug3:忽略 env OLDPWD debug3:忽略 env QTINC debug3:忽略 env USER debug3: 忽略了环境 ANSIBLE_REMOTE_TEMP 调试3:忽略了环境 LS_COLORS 调试3: 忽略环境调试3:忽略环境TMOUT调试3:忽略环境调试3: 忽略 env PAGER debug3:忽略 env PATH debug3:忽略 env debug3:忽略 env PWD debug3:忽略 env JAVA_HOME debug3:忽略 env LMFILES debug3: 忽略 env EFS_SERVERNAME debug3: 忽略 env EDITOR debug1:发送 env LANG = en_US.utf8 debug2:通道 0: 请求 env 确认 0 debug3:忽略 env MODULEPATH debug3:忽略 环境调试3:忽略环境加载模块调试3:忽略环境 ANSIBLE_SCP_IF_SSH 调试3:忽略环境 ANSIBLE_TRANSPORT 调试3: 忽略 env HISTCONTROL debug3:忽略 env debug3:忽略 env SHLVL debug3:忽略 env HOME debug3:忽略 env debug3:忽略 env PYTHONPATH debug3:忽略环境 PBUSER debug3:忽略 env LOGNAME debug3:忽略 env QTLIB debug3:忽略 env CVS_RSH debug3:忽略 env LESSOPEN debug3:忽略了 env EFS_PLATFORM64 debug3:忽略了 env G_BROKEN_FILENAMES debug3:忽略 env BASH_FUNC_append() debug3: 忽略了 env BASH_FUNC_addpath() debug3: 忽略了 env BASH_FUNC_module() debug3:忽略环境 BASH_FUNC_prepend() debug3:忽略环境 BASH_FUNC_delpath() 调试3:忽略环境 BASH_FUNC_showpath() 调试3: 忽略 env _ debug2:通道 0:请求 shell 确认 1 debug2:fd 3 设置 TCP_NODELAY debug2:回调完成 debug2:通道 0:打开 确认 rwindow 0 rmax 32768 debug3:总共写了 320 个字节 2717 debug2:channel_input_status_confirm:类型99 id 0 debug2:PTY 在通道 0 debug2 上接受分配请求:通道 0:rcvd 调整 2097152 debug2:channel_input_status_confirm:类型 99 id 0 debug2:在通道 0 上接受 shell 请求上次登录:9 月 6 日星期二 2016 年 07:24:55 来自主持人B
【问题讨论】:
是否有错误消息或只是挂起?目标主机上的操作系统是什么? 您使用什么类型的身份验证? @KonstantinSuvorov 它只是挂起。但是通过手动 ssh 它不会挂起。我正在使用 ssh no-pass 身份验证 如果您从 shell 手动执行SSH: EXEC
之后的行会发生什么?
抱歉,您希望我执行一个命令。我已经执行了 OP 中发布的命令。
【参考方案1】:
您是否尝试跳过 ssh 的身份验证? 在文件 /etc/ssh/ssh_config 或 ~/.ssh/config 中,添加以下行。
Host *
StrictHostKeyChecking no
或在 ansible.cfg 中添加以下行
[defaults]
host_key_checking = False
【讨论】:
所以你想让我跳过 ssh 身份验证,我认为这是 ssh 的目的以上是关于ansible 无法 ssh 但手动 ssh 成功的主要内容,如果未能解决你的问题,请参考以下文章