web-dev-qa-db-ja.com

ansible Sudo:申し訳ありませんが、sudoを実行するにはttyが必要です

クラウドフォーメーションを使用して環境をセットアップするとき、VagrantボックスとAWSでプレイブックを実行する必要があります。

Vagrantファイルではansible-localを使用し、すべてが正常に動作します

name: Setup Unified Catalog Webserver  
    hosts: 127.0.0.1  
    connection: local  
  become: yes  
  become_user: root
  roles: generic

しかし、AWSでインスタンスを作成すると、ansibleプレイブックがエラーで失敗します。
Sudo: sorry, you must have a tty to run Sudo
これは、ルートとして実行され、ttyがないために発生します。しかし、/etc/sudoersを許可するように!requirettyを変更せずに修正する方法はわかりません

Ansible.cfgまたはクラウドフォーメーションテンプレートで設定できるフラグはありますか?

  "#!/bin/bash\n", "\n", "   
 echo 'Installing Git'\n","  
  yum --nogpgcheck -y install git ansible htop nano wget\n",
 "wget https://s3.eu-central-1.amazonaws.com/XXX -O /root/.ssh/id_rsa\n", 
"chmod 600 /root/.ssh/id_rsa\n", 
"ssh-keyscan 172.31.7.235 >> /root/.ssh/known_hosts\n",
 "git clone [email protected]:something/repo.git /root/repo\n", 
"ansible-playbook /root/env/ansible/test.yml\n
10
Kate

私は自分のために次の解決策を見つけました:
1。 _/etc/sudoers_のrequirettyをsed runプレイブックで変更し、元に戻します。

_ "#!/bin/bash\n", "\n", "  
 echo 'Installing Git'\n"," 
 yum --nogpgcheck -y install git ansible htop nano wget\n",  
 "wget https://s3.eu-central-1.amazonaws.com/xx/ansible -O /root/.ssh/id_rsa\n",  
 "chmod 600 /root/.ssh/id_rsa\n",   
  "ssh-keyscan 172.31.9.231 >> /root/.ssh/known_hosts\n",   
  "git clone [email protected]:somerepo/dev.git /root/dev\n",   
  "sed -i 's/Defaults    requiretty/Defaults    !requiretty/g' /etc/sudoers\n", 
  "\n", 
  "ansible-playbook /root/dev/env/ansible/uk.yml\n",   
  "\n",   
  "sed -i 's/Defaults    !requiretty/Defaults    requiretty/g' /etc/sudoers\n"   
_

または2. ansibleプレイブックで変数を指定します。

_ - name: Setup 
 hosts: 127.0.0.1
 connection: local
 Sudo: {{ require_Sudo }}
 roles:
    - generic
_

AWSクラウド形成テンプレートで実行すると、

_   "ansible-playbook -e require_Sudo=False /root/dev/env/ansible/uk.yml\n"  
_

そしてansible.cfgのVagrantの場合、それを指定できます

_  require_Sudo=True
_
  1. また、CFテンプレートでは、実行中のユーザーとパス変数を特定する場合があります

    ansible-playbook -e$(id -u |egrep '^0$' > /dev/null && require_Sudo=False || require_Sudo=True; echo "require_Sudo=$require_Sudo") /apps/ansible/uk.yml

3
Kate

transport = paramikoansible.cfg構成を設定することで、これを修正できました。

4
user8252064