From 1eb67172471b2fcffab51a99f202d7921c1807fe Mon Sep 17 00:00:00 2001 From: wxy Date: Thu, 22 Feb 2018 11:00:45 +0800 Subject: [PATCH 1/6] PRF:20171231 Why You Should Still Love Telnet.md @XYenChi --- ...171231 Why You Should Still Love Telnet.md | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/translated/tech/20171231 Why You Should Still Love Telnet.md b/translated/tech/20171231 Why You Should Still Love Telnet.md index c08fe6a7eb..0a5b3d604b 100644 --- a/translated/tech/20171231 Why You Should Still Love Telnet.md +++ b/translated/tech/20171231 Why You Should Still Love Telnet.md @@ -1,40 +1,41 @@ Telnet,爱一直在 ====== -Telnet, 是系统管理员登录远程服务器的协议和工具。然而,由于所有的通信都没有加密,包括密码,都是明文发送的。Telnet 在 SSH 被开发出来之后就基本弃用了。 + +Telnet,是系统管理员登录远程服务器的一种协议和工具。然而,由于所有的通信都没有加密,包括密码,都是明文发送的。Telnet 在 SSH 被开发出来之后就基本弃用了。 登录远程服务器,你可能不会也从未考虑过它。但这并不意味着 `telnet` 命令在调试远程连接问题时不是一个实用的工具。 -本教程中,我们将探索使用 `telnet` 解决所有常见问题,“我怎么又连不上啦?” +本教程中,我们将探索使用 `telnet` 解决所有常见问题:“我怎么又连不上啦?” -这种讨厌的问题通常会在安装了像web服务器、邮件服务器、ssh服务器、Samba服务器等诸如此类的事之后遇到,用户无法连接服务器。 +这种讨厌的问题通常会在安装了像 Web服务器、邮件服务器、ssh 服务器、Samba 服务器等诸如此类的事之后遇到,用户无法连接服务器。 `telnet` 不会解决问题但可以很快缩小问题的范围。 `telnet` 用来调试网络问题的简单命令和语法: + ``` telnet - ``` -因为 `telnet` 最初通过端口建立连接不会发送任何数据,适用于任何协议包括加密协议。 +因为 `telnet` 最初通过端口建立连接不会发送任何数据,适用于任何协议,包括加密协议。 -连接问题服务器有四个可能会遇到的主要问题。我们会研究这四个问题,研究他们意味着什么以及如何解决。 +连接问题服务器有四个可能会遇到的主要问题。我们会研究这四个问题,研究它们意味着什么以及如何解决。 本教程默认已经在 `samba.example.com` 安装了 [Samba][1] 服务器而且本地客户无法连上服务器。 ### Error 1 - 连接挂起 首先,我们需要试着用 `telnet` 连接 Samba 服务器。使用下列命令 (Samba 监听端口445): + ``` telnet samba.example.com 445 - ``` 有时连接会莫名停止: + ``` telnet samba.example.com 445 Trying 172.31.25.31... - ``` 这意味着 `telnet` 没有收到任何回应来建立连接。有两个可能的原因: @@ -43,10 +44,10 @@ Trying 172.31.25.31... 2. 防火墙拦截了你的请求。 +为了排除第 1 点,对服务器上进行一个快速 [`mtr samba.example.com`][2] 。如果服务器是可达的,那么便是防火墙(注意:防火墙总是存在的)。 -为了排除 **1.** 在服务器上运行一个快速 [`mtr samba.example.com`][2] 。如果服务器是可达的那么便是防火墙(注意:防火墙总是存在的)。 +首先用 `iptables -L -v -n` 命令检查服务器本身有没有防火墙,没有的话你能看到以下内容: -首先用 `iptables -L -v -n` 命令检查服务器本身有没有防火墙, 没有的话你能看到以下内容: ``` iptables -L -v -n Chain INPUT (policy ACCEPT 0 packets, 0 bytes) @@ -57,41 +58,38 @@ Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination - ``` 如果你看到其他东西那可能就是问题所在了。为了检验,停止 `iptables` 一下并再次运行 `telnet samba.example.com 445` 看看你是否能连接。如果你还是不能连接看看你的提供商或企业有没有防火墙拦截你。 ### Error 2 - DNS 问题 -DNS问题通常发生在你正使用的主机名没有解析到 IP 地址。错误如下: +DNS 问题通常发生在你正使用的主机名没有解析到 IP 地址。错误如下: + ``` telnet samba.example.com 445 Server lookup failure: samba.example.com:445, Name or service not known - ``` -第一步是把主机名替换成服务器的IP地址。如果你可以连上那么就是主机名的问题。 +第一步是把主机名替换成服务器的 IP 地址。如果你可以连上那么就是主机名的问题。 有很多发生的原因(以下是我见过的): - 1. 域注册了吗?用 `whois` 来检验。 - 2. 域过期了吗?用 `whois` 来检验。 + 1. 域名注册了吗?用 `whois` 来检验。 + 2. 域名过期了吗?用 `whois` 来检验。 3. 是否使用正确的主机名?用 `dig` 或 `host` 来确保你使用的主机名解析到正确的 IP。 4. 你的 **A** 记录正确吗?确保你没有偶然创建类似 `smaba.example.com` 的 **A** 记录。 - - -一定要多检查几次拼写和主机名是否正确(是 `samba.example.com` 还是 `samba1.example.com`)这些经常会困扰你特别是长、难或外来主机名。 +一定要多检查几次拼写和主机名是否正确(是 `samba.example.com` 还是 `samba1.example.com`)?这些经常会困扰你,特别是比较长、难记或其它国家的主机名。 ### Error 3 - 服务器没有侦听端口 这种错误发生在 `telnet` 可达服务器但是指定端口没有监听。就像这样: + ``` telnet samba.example.com 445 Trying 172.31.25.31... telnet: Unable to connect to remote host: Connection refused - ``` 有这些原因: @@ -100,18 +98,16 @@ telnet: Unable to connect to remote host: Connection refused 2. 你的应用服务器没有侦听预期的端口。在服务器上运行 `netstat -plunt` 来查看它究竟在干什么并看哪个端口才是对的,实际正在监听中的。 3. 应用服务器没有运行。这可能突然而又悄悄地发生在你启动应用服务器之后。启动服务器运行 `ps auxf` 或 `systemctl status application.service` 查看运行。 - - ### Error 4 - 连接被服务器关闭 这种错误发生在连接成功建立但是应用服务器建立的安全措施一连上就将其结束。错误如下: + ``` telnet samba.example.com 445 Trying 172.31.25.31... Connected to samba.example.com. Escape character is '^]'. -��Connection closed by foreign host. - +Connection closed by foreign host. ``` 最后一行 `Connection closed by foreign host.` 意味着连接被服务器主动终止。为了修复这个问题,需要看看应用服务器的安全设置确保你的 IP 或用户允许连接。 @@ -119,17 +115,18 @@ Escape character is '^]'. ### 成功连接 成功的 `telnet` 连接如下: + ``` telnet samba.example.com 445 Trying 172.31.25.31... Connected to samba.example.com. Escape character is '^]'. - ``` 连接会保持一段时间只要你连接的应用服务器时限没到。 -输入 `CTRL+]` 中止连接然后当你看到 `telnet>` 提示,输入 "quit" 并点击 ENTER 例: +输入 `CTRL+]` 中止连接,然后当你看到 `telnet>` 提示,输入 `quit` 并按回车: + ``` telnet samba.example.com 445 Trying 172.31.25.31... @@ -138,12 +135,11 @@ Escape character is '^]'. ^] telnet> quit Connection closed. - ``` ### 总结 -客户程序连不上服务器的原因有很多。确切原理很难确定特别是当客户是图形用户界面提供很少或没有错误信息。用 `telnet` 并观察输出可以让你很快确定问题所在节约很多时间。 +客户程序连不上服务器的原因有很多。确切原因很难确定,特别是当客户是图形用户界面提供很少或没有错误信息。用 `telnet` 并观察输出可以让你很快确定问题所在节约很多时间。 -------------------------------------------------------------------------------- @@ -151,7 +147,7 @@ via: https://bash-prompt.net/guides/telnet/ 作者:[Elliot Cooper][a] 译者:[XYenChi](https://github.com/XYenChi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 393adb39f59b7a12cb073634a53c1267ba6d7107 Mon Sep 17 00:00:00 2001 From: wxy Date: Thu, 22 Feb 2018 11:03:24 +0800 Subject: [PATCH 2/6] PUB:20171231 Why You Should Still Love Telnet.md @XYenChi https://linux.cn/article-9369-1.html --- .../20171231 Why You Should Still Love Telnet.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {translated/tech => published}/20171231 Why You Should Still Love Telnet.md (100%) diff --git a/translated/tech/20171231 Why You Should Still Love Telnet.md b/published/20171231 Why You Should Still Love Telnet.md similarity index 100% rename from translated/tech/20171231 Why You Should Still Love Telnet.md rename to published/20171231 Why You Should Still Love Telnet.md From 2e29d3d662eaed20173e0a08e4950dcbe901dfdf Mon Sep 17 00:00:00 2001 From: wxy Date: Thu, 22 Feb 2018 12:47:58 +0800 Subject: [PATCH 3/6] PRF:20171211 A tour of containerd 1.0.md @qhwdw --- .../tech/20171211 A tour of containerd 1.0.md | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/translated/tech/20171211 A tour of containerd 1.0.md b/translated/tech/20171211 A tour of containerd 1.0.md index 7b30ccd304..56741f9dc7 100644 --- a/translated/tech/20171211 A tour of containerd 1.0.md +++ b/translated/tech/20171211 A tour of containerd 1.0.md @@ -1,28 +1,31 @@ containerd 1.0 探索之旅 ====== + +我们在过去的文章中讨论了一些 containerd 的不同特性,它是如何设计的,以及随着时间推移已经修复的一些问题。containerd 被用于 Docker、Kubernetes CRI、以及一些其它的项目,在这些平台中事实上都使用了 containerd,而许多人并不知道 containerd 存在于这些平台之中,这篇文章就是为这些人所写的。我将来会写更多的关于 containerd 的设计以及特性集方面的文章,但是现在,让我们从它的基础知识开始。 + ![containerd][1] -我们在过去的文章中讨论了一些 containerd 的不同特性,它是如何设计的,以及随着时间推移已经修复的一些问题。Containerd 是被用于 Docker、Kubernetes CRI、以及一些其它的项目,在这些平台中事实上都使用了 containerd,而许多人并不知道 containerd 存在于这些平台之中,这篇文章就是为这些人所写的。我想写更多的关于 containerd 的设计以及特性集方面的文章,但是现在,我们从它的基础知识开始。 +我认为容器生态系统有时候可能很复杂。尤其是我们所使用的术语。它是什么?一个运行时,还是别的?一个运行时 … containerd(它的发音是 “container-dee”)正如它的名字,它是一个容器守护进程,而不是一些人忽悠我的“收集containnerd”。它最初是作为 OCI 运行时(就像 runc 一样)的集成点而构建的,在过去的六个月中它增加了许多特性,使其达到了像 Docker 这样的现代容器平台以及像 Kubernetes 这样的编排平台的需求。 -我认为容器生态系统有时候可能很复杂。尤其是我们所使用的技术。它是什么?一个运行时,还是别的?一个运行时 … containerd(它的发音是 " _container-dee "_)正如它的名字,它是一个容器守护进程,而不是一些人所“传说”的那样。它最初是作为 OCI 运行时(就像 runc 一样)的集成点构建的,在过去的六个月中它增加了许多特性,使其达到了像 Docker 这样的现代容器平台以及像 Kubernetes 这样的编排平台的需求。 - -那么,你使用 containerd 能去做些什么呢?你可以推送或拉取功能以及镜像管理。可以获得容器生命周期 APIs 去创建、运行、以及管理容器和它们的任务。一个完整的专门用于快照管理的 API,以及一个公开管理的项目。如果你需要去构建一个容器平台,基本上你不需要去处理任何底层操作系统细节方面的事情。我认为关于 containerd 中最重要的部分是,它有一个版本化的并且有 bug 修复和安全补丁的稳定 API。 +那么,你使用 containerd 能去做些什么呢?你可以拥有推送或拉取功能以及镜像管理。可以拥有容器生命周期 API 去创建、运行、以及管理容器和它们的任务。一个完整的专门用于快照管理的 API,以及一个其所依赖的开放治理的项目。如果你需要去构建一个容器平台,基本上你不需要去处理任何底层操作系统细节方面的事情。我认为关于 containerd 中最重要的部分是,它有一个版本化的并且有 bug 修复和安全补丁的稳定 API。 ![containerd][2] -由于在内核中并没有太多的用作 Linux 容器的东西,因此容器是多种内核特性捆绑在一起的,当你构建一个大型平台或者分布式系统时,你需要在你的管理代码和系统调用之间构建一个抽象层,然后将这些特性捆绑粘接在一起去运行一个容器。而这个抽象层就是 containerd 的所在之外。它为稳定类型的平台层提供了一个客户端,这样平台可以构建在顶部而无需进入到内核级。因此,可以让使用容器、任务、和快照类型的工作相比通过管理调用去 clone() 或者 mount() 要友好的多。与灵活性相平衡,直接与运行时或者宿主机交互,这些对象避免了常规的高级抽象所带来的性能牺牲。结果是简单的任务很容易完成,而困难的任务也变得更有可能完成。 +由于在内核中没有一个 Linux 容器这样的东西,因此容器是多种内核特性捆绑在一起而成的,当你构建一个大型平台或者分布式系统时,你需要在你的管理代码和系统调用之间构建一个抽象层,然后将这些特性捆绑粘接在一起去运行一个容器。而这个抽象层就是 containerd 的所在之处。它为稳定类型的平台层提供了一个客户端,这样平台可以构建在顶部而无需进入到内核级。因此,可以让使用容器、任务、和快照类型的工作相比通过管理调用去 clone() 或者 mount() 要友好的多。与灵活性相平衡,直接与运行时或者宿主机交互,这些对象避免了常规的高级抽象所带来的性能牺牲。结果是简单的任务很容易完成,而困难的任务也变得更有可能完成。 -![containerd][3]Containerd 被设计用于 Docker 和 Kubernetes、以及想去抽象出系统调用或者在 Linux、Windows、Solaris、 以及其它的操作系统上特定的功能去运行容器的其它的容器系统。考虑到这些用户的想法,我们希望确保 containerd 只拥有它们所需要的东西,而没有它们不希望的东西。事实上这是不太可能的,但是至少我们想去尝试一下。虽然网络不在 containerd 的范围之内,它并不能做到高级系统完全控制的那些东西。原因是,当你构建一个分布式系统时,网络是非常重要的方面。现在,对于 SDN 和服务发现,在 Linux 上,相比于抽象出 netlink 调用,网络是更特殊的平台。大多数新的网络都是基于路由的,并且每次一个新的容器被创建或者删除时,都会请求更新路由表。服务发现、DNS 等等都需要及时通知到这些改变。如果在 containerd 中添加对网络的管理,为了能够支持不同的网络接口、钩子、以及集成点,将会在 containerd 中增加很大的一块代码。而我们的选择是,在 containerd 中做一个健壮的事件系统,以便于很多的消费者可以去订阅它们所关心的事件。我们也公开发布了一个 [任务 API ][4],它可以让用户去创建一个运行任务,也可以在一个容器的网络命名空间中添加一个接口,以及在一个容器的生命周期中的任何时候,无需复杂的 hooks 来启用容器的进程。 +![containerd][3] -在过去的几个月中另一个添加到 containerd 中的领域是完整的存储,以及支持 OCI 和 Docker 镜像格式的分布式系统。你有一个跨 containerd API 的完整的目录地址存储系统,它不仅适用于镜像,也适用于元数据、检查点、以及附加到容器的任何数据。 +containerd 被设计用于 Docker 和 Kubernetes、以及想去抽象出系统调用或者在 Linux、Windows、Solaris 以及其它的操作系统上特定的功能去运行容器的其它容器系统。考虑到这些用户的想法,我们希望确保 containerd 只拥有它们所需要的东西,而没有它们不希望的东西。事实上这是不太可能的,但是至少我们想去尝试一下。虽然网络不在 containerd 的范围之内,它并不能做成让高级系统可以完全控制的东西。原因是,当你构建一个分布式系统时,网络是非常中心的地方。现在,对于 SDN 和服务发现,相比于在 Linux 上抽象出 netlink 调用,网络是更特殊的平台。大多数新的网络都是基于路由的,并且每次一个新的容器被创建或者删除时,都会请求更新路由表。服务发现、DNS 等等都需要及时被通知到这些改变。如果在 containerd 中添加对网络的管理,为了能够支持不同的网络接口、钩子、以及集成点,将会在 containerd 中增加很大的一块代码。而我们的选择是,在 containerd 中做一个健壮的事件系统,以便于多个消费者可以去订阅它们所关心的事件。我们也公开发布了一个 [任务 API][4],它可以让用户去创建一个运行任务,也可以在一个容器的网络命名空间中添加一个接口,以及在一个容器的生命周期中的任何时候,无需复杂的钩子来启用容器的进程。 -我们也花时间去 [重新考虑如何使用 "图形驱动" 工作][5]。这些是叠加的或者允许镜像分层的块级文件系统,以使你执行的构建更加高效。当我们添加对 devicemapper 的支持时,图形驱动最初是由 Solomon 和我写的。Docker 在那个时候仅支持 AUFS,因此我们在叠加文件系统之后,对图形驱动进行建模。但是,做一个像 devicemapper/lvm 这样的块级文件系统,就如同一个堆叠文件系统一样,从长远来看是非常困难的。这些接口必须基于时间的推移进行扩展,以支持我们最初认为并不需要的那些不同的特性。对于 containerd,我们使用了一个不同的方法,像快照一样做一个堆叠文件系统而不是相反。这样做起来更容易,因为堆叠文件系统比起像 BTRFS、ZFS、以及 devicemapper 这样的文件系统提供了更好的灵活性。因为这些文件系统没有严格的父/子关系。这有助于我们去构建出 [快照的一个小型接口][6],同时还能满足 [构建者][7] 的要求,还能减少了需要的代码数量,从长远来看这样更易于维护。 +在过去的几个月中另一个添加到 containerd 中的领域是完整的存储,以及支持 OCI 和 Docker 镜像格式的分布式系统。有了一个跨 containerd API 的完整的目录地址存储系统,它不仅适用于镜像,也适用于元数据、检查点、以及附加到容器的任何数据。 + +我们也花时间去 [重新考虑如何使用 “图驱动” 工作][5]。这些是叠加的或者允许镜像分层的块级文件系统,可以使你执行的构建更加高效。当我们添加对 devicemapper 的支持时,图驱动graphdrivers最初是由 Solomon 和我写的。Docker 在那个时候仅支持 AUFS,因此我们在叠加文件系统之后,对图驱动进行了建模。但是,做一个像 devicemapper/lvm 这样的块级文件系统,就如同一个堆叠文件系统一样,从长远来看是非常困难的。这些接口必须基于时间的推移进行扩展,以支持我们最初认为并不需要的那些不同的特性。对于 containerd,我们使用了一个不同的方法,像快照一样做一个堆叠文件系统而不是相反。这样做起来更容易,因为堆叠文件系统比起像 BTRFS、ZFS 以及 devicemapper 这样的快照文件系统提供了更好的灵活性。因为这些文件系统没有严格的父/子关系。这有助于我们去构建出 [快照的一个小型接口][6],同时还能满足 [构建者][7] 的要求,还能减少了需要的代码数量,从长远来看这样更易于维护。 ![][8] -你可以在 [Stephen Day's Dec 7th 2017 KubeCon SIG Node presentation][9]上找到更多关于 containerd 的架构方面的详细资料。 +你可以在 [Stephen Day 2017/12/7 在 KubeCon SIG Node 上的演讲][9]找到更多关于 containerd 的架构方面的详细资料。 -除了在 1.0 代码库中的技术和设计上的更改之外,我们也将 [containerd 管理模式从长期 BDFL 转换为技术委员会][10],为社区提供一个独立的可信任的第三方资源。 +除了在 1.0 代码库中的技术和设计上的更改之外,我们也将 [containerd 管理模式从长期 BDFL 模式转换为技术委员会][10],为社区提供一个独立的可信任的第三方资源。 -------------------------------------------------------------------------------- @@ -30,7 +33,7 @@ via: https://blog.docker.com/2017/12/containerd-ga-features-2/ 作者:[Michael Crosby][a] 译者:[qhwdw](https://github.com/qhwdw) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From d04524b8a3dd360265deb71199f001934dbb5b5b Mon Sep 17 00:00:00 2001 From: wxy Date: Thu, 22 Feb 2018 13:01:40 +0800 Subject: [PATCH 4/6] PUB:20171211 A tour of containerd 1.0.md @qhwdw https://linux.cn/article-9370-1.html --- .../tech => published}/20171211 A tour of containerd 1.0.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {translated/tech => published}/20171211 A tour of containerd 1.0.md (100%) diff --git a/translated/tech/20171211 A tour of containerd 1.0.md b/published/20171211 A tour of containerd 1.0.md similarity index 100% rename from translated/tech/20171211 A tour of containerd 1.0.md rename to published/20171211 A tour of containerd 1.0.md From 7f0908d99ba85a48b4320117529909b47ac31ff2 Mon Sep 17 00:00:00 2001 From: wxy Date: Thu, 22 Feb 2018 13:48:59 +0800 Subject: [PATCH 5/6] PRF:20180210 How to create AWS ec2 key using Ansible.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @qianghaohao 恭喜你完成了第一篇翻译~ --- ...How to create AWS ec2 key using Ansible.md | 96 +++++++++++++------ 1 file changed, 66 insertions(+), 30 deletions(-) diff --git a/translated/tech/20180210 How to create AWS ec2 key using Ansible.md b/translated/tech/20180210 How to create AWS ec2 key using Ansible.md index f0850d4134..7924b642eb 100644 --- a/translated/tech/20180210 How to create AWS ec2 key using Ansible.md +++ b/translated/tech/20180210 How to create AWS ec2 key using Ansible.md @@ -1,33 +1,43 @@ 如何使用 Ansible 创建 AWS ec2 密钥 ====== -我想使用 Ansible 工具创建 Amazon EC2 密钥对。不想使用 AWS CLI 来创建。可以使用 Ansible 来创建 AWS ec2 密钥吗? -你需要使用 Ansible 的 ec2_key 模块。这个模块依赖于 python-boto 2.5 版本或者更高版本。 boto 只不过是亚马逊 Web 服务的一个 Python API。你可以将 boto 用于 Amazon S3,Amazon EC2 等其他服务。简而言之,你需要安装 ansible 和 boto 模块。我们一起来看下如何安装 boto 并结合 Ansible 使用。 +**我想使用 Ansible 工具创建 Amazon EC2 密钥对。不想使用 AWS CLI 来创建。可以使用 Ansible 来创建 AWS ec2 密钥吗?** + +你需要使用 Ansible 的 ec2_key 模块。这个模块依赖于 python-boto 2.5 版本或者更高版本。 boto 是亚马逊 Web 服务的一个 Python API。你可以将 boto 用于 Amazon S3、Amazon EC2 等其他服务。简而言之,你需要安装 Ansible 和 boto 模块。我们一起来看下如何安装 boto 并结合 Ansible 使用。 + +### 第一步 - 在 Ubuntu 上安装最新版本的 Ansible + +你必须[给你的系统配置 PPA 来安装最新版的 Ansible][2]。为了管理你从各种 PPA(Personal Package Archives)安装软件的仓库,你可以上传 Ubuntu 源码包并编译,然后通过 Launchpad 以 apt 仓库的形式发布。键入如下命令 [apt-get 命令][3]或者 [apt 命令][4]: -### 第一步 - [在 Ubuntu 上安装最新版本的 Ansible][1] -你必须[给你的系统配置 PPA 来安装最新版的 ansible][2]。为了管理你从各种 PPA(Personal Package Archives) 安装软件的仓库,你可以上传 Ubuntu 源码包并编译,然后通过 Launchpad 以 apt 仓库的形式发布。键入如下命令 [apt-get 命令][3]或者 [apt 命令][4]: ``` $ sudo apt update $ sudo apt upgrade $ sudo apt install software-properties-common ``` -接下来给你的系统的软件源中添加 ppa:ansible/ansible + +接下来给你的系统的软件源中添加 `ppa:ansible/ansible`。 + ``` $ sudo apt-add-repository ppa:ansible/ansible ``` -更新你的仓库并安装ansible: + +更新你的仓库并安装 Ansible: + ``` $ sudo apt update $ sudo apt install ansible ``` + 安装 boto: + ``` $ pip3 install boto3 ``` -#### 关于在CentOS/RHEL 7.x上安装Ansible的注意事项 +#### 关于在CentOS/RHEL 7.x上安装 Ansible 的注意事项 你[需要在 CentOS 和 RHEL 7.x 上配置 EPEL 源][5]和 [yum命令][6] + ``` $ cd /tmp $ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm @@ -35,14 +45,17 @@ $ ls *.rpm $ sudo yum install epel-release-latest-7.noarch.rpm $ sudo yum install ansible ``` + 安装 boto: + ``` $ pip install boto3 ``` ### 第二步 2 – 配置 boto -你需要配置 AWS credentials/API 密钥。参考 “[AWS Security Credentials][7]” 文档如何创建 API key。用 mkdir 命令创建一个名为 ~/.aws 的目录,然后配置 API key: +你需要配置 AWS credentials/API 密钥。参考 “[AWS Security Credentials][7]” 文档如何创建 API key。用 `mkdir` 命令创建一个名为 `~/.aws` 的目录,然后配置 API key: + ``` $ mkdir -pv ~/.aws/ $ vi ~/.aws/credentials @@ -54,14 +67,20 @@ aws_secret_access_key = YOUR-SECRET-ACCESS-KEY-HERE ``` 还需要配置默认 [AWS 区域][8]: -`$ vi ~/.aws/config` + +``` +$ vi ~/.aws/config +``` + 输出样例如下: + ``` [default] region = us-west-1 ``` -通过创建一个简单的名为 test-boto.py 的 python 程序来测试你的 boto 配置是否正确: +通过创建一个简单的名为 `test-boto.py` 的 Python 程序来测试你的 boto 配置是否正确: + ``` #!/usr/bin/python3 # A simple program to test boto and print s3 bucket names @@ -72,20 +91,25 @@ for b in t.buckets.all(): ``` 按下面方式来运行该程序: -`$ python3 test-boto.py` + +``` +$ python3 test-boto.py +``` + 输出样例: + ``` nixcraft-images nixcraft-backups-cbz nixcraft-backups-forum - ``` 上面输出可以确定 Python-boto 可以使用 AWS API 正常工作。 ### 步骤 3 - 使用 Ansible 创建 AWS ec2 密钥 -创建一个名为 ec2.key.yml 的 playbook,如下所示: +创建一个名为 `ec2.key.yml` 的剧本,如下所示: + ``` --- - hosts: local @@ -106,44 +130,54 @@ nixcraft-backups-forum 其中, - * ec2_key: – ec2 密钥对。 - * name: nixcraft_key – 密钥对的名称。 - * region: us-west-1 – 使用的 AWS 区域。 - * register: ec2_key_result : 保存生成的密钥到 ec2_key_result 变量。 - * copy: content="{{ ec2_key_result.key.private_key }}" dest="./aws.nixcraft.pem" mode=0600 : 将 ec2_key_result.key.private_key 的内容保存到当前目录的一个名为 aws.nixcraft.pem 的文件中。设置该文件的权限为 0600 (unix 文件权限). - * when: ec2_key_result.changed : 仅仅在 ec2_key_result 改变时才保存。我们不想覆盖你的密钥文件。 + * `ec2_key:` – ec2 密钥对。 + * `name: nixcraft_key` – 密钥对的名称。 + * `region: us-west-1` – 使用的 AWS 区域。 + * `register: ec2_key_result` – 保存生成的密钥到 ec2_key_result 变量。 + * `copy: content="{{ ec2_key_result.key.private_key }}" dest="./aws.nixcraft.pem" mode=0600` – 将 `ec2_key_result.key.private_key` 的内容保存到当前目录的一个名为 `aws.nixcraft.pem` 的文件中。设置该文件的权限为 `0600` (unix 文件权限)。 + * `when: ec2_key_result.changed` – 仅仅在 `ec2_key_result` 改变时才保存。我们不想覆盖你的密钥文件。 +你还必须创建如下 `hosts` 文件: -你还必须创建如下主机文件: ``` [local] localhost - ``` -如下运行你的 playbook: -`$ ansible-playbook -i hosts ec2.key.yml` +如下运行你的剧本: + +``` +$ ansible-playbook -i hosts ec2.key.yml +``` + ![](https://www.cyberciti.biz/media/new/faq/2018/02/How-to-create-AWS-ec2-key-using-Ansible.jpg) -最后你应该有一个名为 aws.nixcraft.pem 私钥,该私钥可以和 AWS EC2 一起使用。查看你的密钥 [cat 命令][9]: +最后你应该有一个名为 `aws.nixcraft.pem 私钥,该私钥可以和 AWS EC2 一起使用。使用 [cat 命令][9]查看你的密钥: + ``` $ cat aws.nixcraft.pem ``` + 如果你有 EC2 虚拟机,请按如下方式使用: + ``` $ ssh -i aws.nixcraft.pem user@ec2-vm-dns-name ``` -#### 查看有关 python 数据结构变量名的信息,比如 ec2_key_result.changed 和 ec2_key_result.key.private_key +**查看有关 python 数据结构变量名的信息,比如 ec2_key_result.changed 和 ec2_key_result.key.private_key** -你一定在想我是如何使用变量名的,比如 ec2_key_result.changed 和 ec2_key_result.key.private_key。它们在哪里定义过吗?变量的值是通过 API 调用返回的。简单地使用 -v 选项运行 ansible-playbook 命令来查看这样的信息: -`$ ansible-playbook -v -i hosts ec2.key.yml` +你一定在想我是如何使用变量名的,比如 `ec2_key_result.changed` 和 `ec2_key_result.key.private_key`。它们在哪里定义过吗?变量的值是通过 API 调用返回的。简单地使用 `-v` 选项运行 `ansible-playbook` 命令来查看这样的信息: + +``` +$ ansible-playbook -v -i hosts ec2.key.yml +``` ![](https://www.cyberciti.biz/media/new/faq/2018/02/ansible-verbose-output.jpg) ### 我该如何删除一个密钥? -使用如下 ec2-key-delete.yml: +使用如下 `ec2-key-delete.yml`: + ``` --- - hosts: local @@ -160,8 +194,10 @@ $ ssh -i aws.nixcraft.pem user@ec2-vm-dns-name ``` 按照如下方式运行: -`$ ansible-playbook -i hosts ec2-key-delete.yml` +``` +$ ansible-playbook -i hosts ec2-key-delete.yml +``` ### 关于作者 @@ -173,7 +209,7 @@ via: https://www.cyberciti.biz/faq/how-to-create-aws-ec2-key-using-ansible/ 作者:[Vivek Gite][a] 译者:[qianghaohao](https://github.com/qianghaohao) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 7c3a3c1a8a9d573641cdd06b5ad7ffcee27b3ab0 Mon Sep 17 00:00:00 2001 From: wxy Date: Thu, 22 Feb 2018 13:49:53 +0800 Subject: [PATCH 6/6] PUB:20180210 How to create AWS ec2 key using Ansible.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @qianghaohao 首发地址: https://linux.cn/article-9371-1.html 您的 LCTT 专页地址: https://linux.cn/lctt/qianghaohao --- .../20180210 How to create AWS ec2 key using Ansible.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {translated/tech => published}/20180210 How to create AWS ec2 key using Ansible.md (100%) diff --git a/translated/tech/20180210 How to create AWS ec2 key using Ansible.md b/published/20180210 How to create AWS ec2 key using Ansible.md similarity index 100% rename from translated/tech/20180210 How to create AWS ec2 key using Ansible.md rename to published/20180210 How to create AWS ec2 key using Ansible.md