2016-03-21 43 views
-2

我有一个shell脚本权限被拒绝公钥运行shell脚本,其中包含ansible命令

#!/bin/bash 

echo "hello world" 

ansible zookservers -i /home/ec2-user/kafka_scripts/ansible_rep/inventory -a "/home/ec2-user/kafka_2.11-0.9.0.0/bin/kafka-server-start.sh kafka_2.11-0.9.0.0/config/server.properties" --sudo 

我的错误是

| FAILED => SSH Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 
    while connecting to 172.30.0.243:22 

当我运行ansible命令则正在执行 ,但当我把它放在一个shell脚本中时,我得到上面的错误

我的外壳与chmod 777权限 - 所以问题它没有与外壳执行权限

我发现了一些有趣的事情 当我从任何其他地方运行脚本我收到错误。但是当它运行在一个安全的目录中时,它就会被执行。后来当我从任何其他目录运行它时,它不会引发任何错误。 所以这个问题是首次公开密钥认证

+0

而你不是用sudo调用脚本?这是唯一的想法,我会为什么你的关键被忽略。用'-vvv'调用Ansible来调试ssh。 – udondan

+0

嗨我试过,但我无法解决问题 - '失败=> SSH错误:权限被拒绝(publickey,gssapi-keyex,gssapi-with-mic)。 连接到172.30.0.243:22时 使用-vvvv重新运行命令有时会很有用,它会打印SSH调试输出以帮助诊断问题。 –

+0

我发现了一些有趣的东西 - 当我从其他地方运行脚本时出现错误。但是当它运行在一个安全的目录中时,它会被执行,然后当我从任何其他目录运行它时,它不会引发任何错误。所以问题是与初始公钥认证 - 很高兴,如果你能以这种方式帮助我 –

回答

1

I found something intersting -- when I run the script from any other place I'm getting error. but when run it in ansible directory then it is executed

问题最有可能是你的ansible.cfg的位置。 Ansible将使用配置从这些位置(从docs)中的一个:

  • ANSIBLE_CONFIG(环境变量)
  • ansible.cfg(在当前目录)
  • .ansible.cfg(在主目录)
  • /etc/ansible/ansible.cfg

首场比赛胜利。

因此,它使用来自“ansible directory”的配置,如果在那里调用则从那里。如果从其他位置调用,那么该目录中没有ansible.cfg。由于这是您存储用户名和私钥位置的地方,因此认证失败。

最好的解决方案似乎是利用环境变量ANSIBLE_CONFIG。只需在那里存储你的ansible.cfg的路径。我认为这是/home/ec2-user/kafka_scripts/ansible_rep/ansible.cfg,对吧?

您可以在脚本中设置该变量。

ANSIBLE_CONFIG=/home/ec2-user/kafka_scripts/ansible_rep/ansible.cfg ansible zookservers -i /home/ec2-user/kafka_scripts/ansible_rep/inventory -a "/home/ec2-user/kafka_2.11-0.9.0.0/bin/kafka-server-start.sh kafka_2.11-0.9.0.0/config/server.properties" --sudo 
相关问题