ubuntu安装Ansible及部署

获取安装包的服务器进行替换,避免翻墙
sudo sed -i -re 's/\w+\.\.\.com//g' /etc/apt/.list
更新安装库
sudo apt-get
然后输入最后的四行命令进行安装的操作
sudo apt-get--
sudo apt-add- ppa:/
sudo apt-get
sudo apt-get
设置SSH密钥
如上所述,主要通过SSH与客户端计算机通信 。虽然它当然有能力处理基于密码的SSH身份验证,SSH密钥帮助保持简单 。
我们可以通过两种不同的方式设置SSH密钥 , 具体取决于您是否已经拥有要使用的密钥 。我们假设您要管理的服务器将是 。
创建新的SSH密钥对
如果您还没有要用于管理的SSH密钥对,我们可以立即在您的 VPS上创建一个SSH密钥对 。
我们将在我们的上创建一个SSH密钥对,以与将管理的主机进行身份验证 。
作为您将控制的用户,请通过键入以下命令来创建RSA密钥对:
ssh-keygen
将要求您指定创建的密钥对的文件位置 , 密码和密码短语确认 。按所有这些键的ENTER接受默认值 。
您的新钥匙就在您的用户可用~/.ssh目录 。公钥(一个可以共享)被称为.pub 。私钥(您保持安全的)被称为 。
您可以将它们添加到您的控制面板 , 以允许您将SSH密钥嵌入新创建的 。这将允许您的立即SSH到你的新,没有任何其他身份验证 。
为此,请点击左侧导航菜单上的“SSH Keys”链接 。在新屏幕中,点击右上角的“添加SSH密钥”按钮:
在顶部字段中输入要与此键相关联的名称 。在您的 VPS实例上,键入此以获取您的公钥的内容:
cat ~/.ssh/id_rsa.pub
公钥示例
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0
【ubuntu安装Ansible及部署】返回给您的字符串是您需要粘贴到控制面板的第二个字段中的字符串:
单击“创建SSH密钥”将您的密钥添加到控制面板 。现在,无论何时创建新的,您都将能够将公共SSH密钥嵌入到新服务器中,从而允许您与您的实例进行通信 。您只需要在创建过程的“添加可选SSH密钥”部分中选择密钥:
将现有SSH密钥对传输到
如果您已经有一个SSH密钥对 , 您正在使用它来认证您的 , 您可以将凭据转移到您的新 , 而不是创建一个新的对 。这具有使其自动与您已配置为使用密钥的任何服务器一起工作的优点 。
在您为配置SSH密钥身份验证的计算机上 , 键入以下内容获取公钥:
cat ~/.ssh/id_rsa.pub
公钥示例
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0
在您的服务器上,您需要创建一个隐藏目录来存储您的密钥 。说它.ssh从而使SSH程序知道在哪里找到它:

ubuntu安装Ansible及部署

文章插图
mkdir ~/.ssh
我们应该锁定对此目录的访问,以便只有您可以输入或写入:
chmod 700 ~/.ssh
现在,进入该目录,并打开一个名为.pub在文本编辑器:
cd ~/.sshnano id_rsa.pub
将您的公钥的输出从家用计算机粘贴到此文件中:
示例.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0
保存并关闭文件 。我们将通过键入以下内容确保此文件具有正确的权限:
chmod 644 id_rsa.pub
现在,回到配置为SSH密钥访问的本地计算机上,键入:
cat ~/.ssh/id_rsa
示例私钥
-----BEGIN RSA PRIVATE KEY-----MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pDN+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQkyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPUynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq. . .. . .cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB71VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TTqVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo-----END RSA PRIVATE KEY-----
输出将相当长 。
回到你的,我们需要创建了一个新文件~/.ssh目录:
nano id_rsa
在里面 , 将上一个命令的结果粘贴到本地计算机上:
-----BEGIN RSA PRIVATE KEY-----MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pDN+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQkyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPUynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq. . .. . .cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB71VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TTqVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo-----END RSA PRIVATE KEY-----
确保包括第一个和最后一个标记线 。它们是必需的,以便密钥文件有效 。保存并关闭文件 。
我们需要更改权限以确保此文件安全:
chmod 600 id_rsa
在这一点上 , 将能够使用这些SSH密钥与嵌入了密钥的任何服务器进行通信 。
配置主机
通过“hosts”文件跟踪它所知道的所有服务器 。我们需要先设置此文件,然后才能开始与我们的其他计算机通信 。
使用root权限打开文件,如下所示:
sudo nano /etc/ansible/hosts
你会看到一个文件有很多示例配置 , 没有一个将真正为我们工作,因为这些主机组成 。因此,首先,我们通过在每行之前添加一个“#”来注释掉这个文件中的所有行 。
我们将在文件中保留这些示例 , 以帮助我们进行配置,如果我们希望在将来实现更复杂的场景 。
一旦所有的行都注释掉 , 我们可以开始添加我们的实际主机 。
hosts文件相当灵活 , 可以通过几种不同的方式进行配置 。我们将使用的语法看起来像这样:
主机文件示例
[group_name]alias ansible_ssh_host=your_server_ip
是一个组织标记 , 可让您使用一个字来引用下面列出的任何服务器 。别名只是一个引用该服务器的名称 。
所以在我们的场景中,我们想象我们有三个服务器,我们将要控制与 。这些服务器可以从输入:
ssh root@your_server_ip
如果您已正确设置此密码 , 则不应提示您输入密码 。我们将假定 , 我们的的IP地址是192.0.2.1,192.0.2.2和192.0.2.3 。我们将设置这使我们可以把这些单独的host1 , host2和host3,或作为一个群体的 。
这是我们应该添加到我们的hosts文件来完成这个块:
[droplets]host1 ansible_ssh_host=192.0.2.1host2 ansible_ssh_host=192.0.2.2host3 ansible_ssh_host=192.0.2.3
主机可以在多个组中,组可以为其所有成员配置参数 。让我们现在尝试一下 。
使用我们当前的设置,如果我们尝试使用连接到任何这些主机,该命令将失败(假设您不是以root用户身份操作) 。这是因为您的SSH密钥是为远程系统上的root用户嵌入的,并且将默认尝试作为当前用户连接 。连接尝试将获得此错误:
连接错误
host1 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue
在我的电脑,我使用了一个名为用户demo 。会尝试连接到与每个主机ssh demo@ 。如果演示用户不在远程系统上 , 这将不工作 。
我们可以创建一个文件,告诉“”组中的所有服务器使用root用户连接 。
要做到这一点,我们将创建在配置结构称为目录 。在此文件夹中,我们可以为要配置的每个组创建YAML格式的文件:
sudo mkdir /etc/ansible/group_varssudo nano /etc/ansible/group_vars/droplets
我们可以把我们的配置在这里 。YAML文件以“—”开头,因此请确保不要忘记该部分 。
/ etc ///
---ansible_ssh_user: root
保存并在完成后关闭此文件 。
如果你想为每个服务器指定配置细节,而不管组关联的 , 你可以在把这些信息在一个文件中/etc///all 。单个主机可以通过在目录下创建文件进行配置/etc// 。
使用简单的命令
现在我们已经设置了主机和足够的配置详细信息,以允许我们成功连接到我们的主机,我们可以尝试我们的第一个命令 。
通过键入以下命令来ping您配置的所有服务器:
ansible -m ping all
平滑输出
host1 | success >> {"changed": false,"ping": "pong"}host3 | success >> {"changed": false,"ping": "pong"}host2 | success >> {"changed": false,"ping": "pong"}
这是一个基本测试,以确保已连接到其所有主机 。
“all”表示所有主机 。我们可以很容易地指定一个组:
ansible -m ping droplets
我们还可以指定单个主机:
ansible -m ping host1
我们可以通过用冒号分隔它们来指定多个主机:
ansible -m ping host1:host2
该-m ping命令的部分是指令使用“平”模块 。这些基本上是可以在远程主机上运行的命令 。ping模块以很多方式运行,就像Linux中的正常ping实用程序一样,而是检查连接 。
ping模块不会真正采取任何参数,但我们可以尝试另一个命令,看看它是如何工作 。我们通过输入参数传递到脚本-a 。
“shell”模块允许我们向远程主机发送终端命令并检索结果 。例如,要找出我们的host1机器上的内存使用情况,我们可以使用:
ansible -m shell -a 'free -m' host1
Shell输出
host1 | success | rc=0 >>totalusedfreesharedbufferscachedMem:3954227372601493-/+ buffers/cache:1193834Swap:000
结论
现在,您应该将您的服务器配置为与您要控制的服务器通信 。我们已验证可以与每个主机沟通,我们已经使用了命令来远程执行简单的任务 。
虽然这是有用的 , 我们没有涵盖的最强大的功能在这篇文章: 。我们已经通过为我们的服务器建立了一个很好的基?。堑蔽颐墙樯苋绾问褂美醋远冻碳扑慊呐渲檬?nbsp;, 我们将在以后的文章中进行大量的工作 。