簡體   English   中英

運行包含 ansible 命令的 shell 腳本時的權限被拒絕-公鑰

[英]permission denied-public key while running a shell script which contains ansible command

我有一個 shell 腳本

#!/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 權限 - 所以問題不是外殼執行權限

當我從出現錯誤的任何其他地方運行腳本時,我發現了一些有趣的事情。 但是當在 ansible 目錄中運行它時,它就會被執行。 稍后當我從任何其他目錄運行它時,它不會拋出任何錯誤。 所以問題在於初始公鑰認證

我發現了一些有趣的東西——當我從任何其他地方運行腳本時,我遇到了錯誤。 但是當在 ansible 目錄中運行它時,它就會被執行

問題很可能是您的ansible.cfg的位置。 Ansible 將使用這些位置之一的配置(來自docs ):

  • ANSIBLE_CONFIG(環境變量)
  • ansible.cfg(在當前目錄中)
  • .ansible.cfg(在主目錄中)
  • /etc/ansible/ansible.cfg

第一場比賽獲勝。

所以它使用來自“ansible 目錄”的配置,如果那里調用。 如果從任何其他位置調用,則該目錄中沒有 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM