使用Ansible工具时如何使用root密码登录

时间:2020-01-09 10:39:31  来源:igfitidea点击:

我需要在Ansible中使用root用户和密码在20台服务器上运行Linux命令。
如何通过基于ssh的会话在Ansible中传递用户名和密码?
如何为ssh连接设置默认的Ansible用户名/密码?
有两种方法可以解决此问题。

方法1:在使用ssh时强制输入用户名和密码

语法为:

export ANSIBLE_HOST_KEY_CHECKING=false
ansible --user {user} --ask-pass -i {inventory} {hostname} -a "command" -c paramiko
ansible --user root --ask-pass -i ~/myhosts www1 -a "uptime" -c paramiko
ansible --user root --ask-pass -i ~/myhosts cluster -a "/bin/date" -c paramiko

首先使用cat命令创建列表文件:

$ cat inventory

输出示例:

[cluster] ln.igi01
ln.igi01
ln.igi01
ln.igi01

例如,在具有root用户的群集中的所有主机上运行日期命令,并提示输入root用户密码,请运行:

$ export ANSIBLE_HOST_KEY_CHECKING=false
$ ansible --user root --ask-pass -i inventory cluster\
-a "/bin/date" -c paramiko

其中:

  • export ANSIBLE_HOST_KEY_CHECKING = false:默认情况下启用主机密钥检查,可以使用此选项禁用它。否则,您可能会收到一条错误消息:无法确定主机ln.igi01的真实性。
  • --user root:以ssh的root用户身份连接。
  • --ask-pass:要求ssh的连接密码。
  • -i inventory:设置库存文件名。
  • cluster:设置主机名或变量
  • -a"/bin/date":运行/bin/date命令所有给定的主机
  • -c paramiko:使用paramiko模块进行ssh连接。

请注意,建议使用SSH密钥,但可以使用密码验证,如前所述。

关于在列表文件中按主机设置连接类型和用户的说明

语法为:

$ cat inventory

输出示例:

[cluster] ln.igi01 ansible_connection=ssh ansible_user=vivek
ln.igi01 ansible_connection=ssh ansible_user=root
ln.igi01 ansible_connection=ssh ansible_user=root
ln.igi01 ansible_connection=ssh ansible_user=root ansible_ssh_pass=foo

方法2:设置和使用ssh键(推荐)

创建ssh密钥(如果未创建),运行:

## [ Set password for your keys ] ##
$ ssh-keygen -t rsa
## [ Copy pub key to all remote boxes ] ##
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
## [ Test it ] ##
$ ssh [email protected]
## [ Set up SSH agent to avoid retyping passwords  ] ##
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
## [ Run ansible  ] ##
$ ansible all -m ping
$ ansible -i inventory cluster -a "/bin/date"