2016-03-21 78 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 
相關問題