使用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"