如何为每个新服务器运行第一个ansible命令时自动设置SSH密钥传递?

时间:2016-09-22 18:00:27

标签: ssh ansible ssh-keys ssh-keygen

今天我开始学习ansible,我尝试在远程服务器上运行ping命令时遇到的第一件事是

192.168.1.100 | UNREACHABLE! => {
    "changed": false, 
    "msg": "(u'192.168.1.100', <paramiko.rsakey.RSAKey object at 0x103c8d250>, <paramiko.rsakey.RSAKey object at 0x103c62f50>)", 
    "unreachable": true
}

所以我手动设置了SSH密钥,我认为我面对这个问题,因为任何devops没有编写或教程解释他们不需要它的步骤,或者他们是否在编写教程之前手动设置了它视频。

所以我认为如果我们能够自动化这一步也会很棒。

3 个答案:

答案 0 :(得分:0)

如果没有设置ssh密钥,您可以随时提示输入ssh密码

-k, --ask-pass      ask for connection password

答案 1 :(得分:0)

我使用这些命令在root帐户下设置CentOS 6.8上的密钥:

h(2000)=2

cat ~/.ssh/id_rsa.pub | ssh ${user}@${1} -o StrictHostKeyChecking=no 'mkdir .ssh > /dev/null 2>&1; restorecon -R /root/; cat >> .ssh/authorized_keys' ansible $1 -u $user -i etc/ansible/${hosts} -m raw -a "yum -y install python-simplejson" ansible $1 -u $user -i etc/ansible/${hosts} -m yum -a "name=libselinux-python state=latest" 是传递给脚本的第一个参数,应该是机器名。 我在其他地方设置${1},但您也可以将其设为参数。

${user}是我的主机文件,它有一个默认值,但可以用参数覆盖。

${hosts}命令是安抚selinux。我只是硬编码它来运行restorecon目录,我无法记住原因。如果你运行它来设置一个非root用户,我认为该命令是无意义的。

我认为需要这些安装,/root/python-simplejson

如果重复运行,这将使libselinux-python个文件发送垃圾邮件。可能有更好的方法,但这是我的快速和脏运行一次脚本。

我在CentOS 7和Ubuntu的脚本中略有不同。

答案 2 :(得分:0)

不确定这些服务器的类型,但几乎所有Ansible教程都涵盖了Ansible使用SSH并且您需要SSH访问才能使用它的事实。

根据您首先配置服务器的方式,您可以在首次启动时注入ssh密钥,但如果您从仅密码登录开始,则可以在运行时使用--ask-pass标志剧本。然后,您可以使用authorized_key模块在​​服务器上设置密钥。