跳转到主要内容

通过中心配置管理服务器的工具。插件允许提供、配置和其他管理任务。

项目描述

概述

Ploy是一个命令行工具,用于提供、管理和控制服务器实例。有针对EC2(ploy_ec2)、FreeBSD Jails(ploy_ezjail)等的插件。您可以在ploy处理细节(如ssh指纹检查)的同时创建、删除、监视和ssh进入实例。其他插件提供高级功能,如集成Fabric(ploy_fabric)和Ansible(ploy_ansible)。

您可以在http://ploy.readthedocs.org/en/latest/找到详细文档

安装

ploy最好使用easy_install、pip或在buildout中使用zc.recipe.egg安装。它安装了两个脚本,即ployploy-ssh

配置

有关服务器实例的所有信息都位于ploy.conf中,默认情况下在etc/ploy.conf中查找。

插件

后端支持和更多功能通过插件实现。ploy 包含一个插件。

plain

用于可通过 ssh 访问的常规服务器。

您可以使用 ploy -v 查看当前安装中可用的插件。

Plain

使用 plain 实例,您可以将有关服务器的信息放入配置文件中,以利用一些 ploy 功能,如 ssh 指纹检查和 Fabric 集成等插件。

选项

hostip

(必需) 服务器的主机名或地址。

user

ssh 连接的默认用户。如果设置为 *,则使用当前本地用户名。

port

ssh 端口号。

ssh-host-keysssh-fingerprints

(必需) 服务器公 ssh 主机密钥(或指纹)。

ssh-host-keys

如果可用,最好使用公 ssh 主机密钥。您可以指定路径,或直接输入内容(ssh-rsa AAAA...)。多个主机密钥可以按行指定,或用逗号分隔。

ssh-fingerprints

如果设置为 ask,则启用手动交互式验证。如果设置为 ignore,则完全不执行验证!多个指纹可以按行指定,或用逗号分隔。指纹的格式可以是16字节作为用冒号分隔的十六进制数,或以 MD5: 前缀的相同16字节,或者是哈希类型,后跟冒号和 base 64 编码的哈希摘要。

password-fallback

如果此布尔值为真,则如果 ssh 密钥不起作用,则启用密码回退。默认情况下是关闭的。您可能需要多次输入密码。第一次是由 paramiko 引起的,这是始终发生的,但会被记住。其他时间是由 ssh 命令行工具触发的。

password

永远不要直接使用此密码!如果启用密码回退,则使用此密码。这主要用于 Fabric 脚本,这些脚本有其他获取密码的方法。一个用例是从 FreeBSDmfsBSD 发行版中进行引导,其中密码是固定的。

proxycommand

使用 ploy-ssh 命令时,在 ssh 的 ProxyCommand 选项中使用的命令。可以使用一些变量

path

ploy.conf 文件的目录。如果您想将 ploy-ssh 命令本身用作代理,则很有用。

known_hosts

ploy 管理的 known_hosts 文件的绝对路径。

instances

其他实例的变量。例如:instances.foo.ip

除了这些,还可以使用实例本身的变量。

一个完整的代理命令示例

proxycommand = {path}/../bin/ploy-ssh vm-master -W {ip}:22
ssh-key-filename

要使用的私有 ssh 密钥的位置。

ssh-extra-args

传递给 ssh 的由换行符分隔的设置列表。

示例

ssh-extra-args = ForwardAgent yes

SSH 集成

ploy 提供了一个名为 ploy-ssh 的附加工具,用于轻松执行针对命名实例的基于 SSH 的操作。特别是,它封装了整个 SSH 指纹 机制。例如,EC2 实例通常寿命短暂,通常会触发警告,尤其是如果您正在使用弹性 IP。

注意:它并非简单地关闭这些检查,而是通过后端插件提供的机制透明地更新自己的指纹列表。

最简单的情况是直接与一个实例建立SSH会话。您可以使用ploy工具的ssh子命令,如下所示

ploy ssh INSTANCENAME

或者您可以直接使用ploy-ssh命令,如下所示

ploy-ssh INSTANCENAME

后者是为了支持scp和rsync而提供的。以下是一些示例,您应该已经了解了

scp -S `pwd`/bin/ploy-ssh some.file demo-server:/some/path/
rsync -e "bin/ploy-ssh" some/path fschulze@demo-server:/some/path

实例名称

实例有一个id,这是配置中冒号后面的部分。它们还有一个唯一的id,其形式为[masterid]-[instanceid]。其中[masterid]取决于插件。对于普通实例,它是plain。而[instanceid]是实例的id。因此,如果您有如下配置

[plain-instance:foo]
...

那么实例的唯一id就是plain-foo

宏展开

ploy.conf中,您可以使用宏展开以使配置文件更简洁。它看起来是这样的

[ec2-instance:demo-server2]
<= demo-server
securitygroups = demo-server2

[ec2-securitygroup:demo-server2]
<= demo-server

除了后端插件的一些特殊情况外,指定宏的所有选项都会被复制。

如果您想从其他类型的选项复制数据,您可以在宏名称中添加一个冒号。如果您想为类似这样的实例提供一个基础,这很有用

[macro:base-instance]
keypair = default
region = eu-west-1
placement = eu-west-1a

[ec2-instance:server]
<= macro:base-instance
...

配置值的按摩

插件和ploy会将配置中的某些字符串值按摩成其他类型,并进行格式化或扩展。

您也可以自己使用它,这对于Fabric集成和其他事物非常有用。

以下是一个简单的示例

[section]
massagers =
  intvalue=ploy.config.IntegerMassager
  boolvalue=ploy.config.BooleanMassager
intvalue = 1
boolvalue = yes

如果您现在从例如fabric任务中访问这些值,您会得到正确的类型而不是字符串。

上述语法只为此部分注册了按摩器。您可以使用此语法为其他部分或甚至部分组注册按摩器

massagers =
  [option]=[sectiongroup]:import.path.to.massager
  [option]=[sectiongroup]:[section]:import.path.to.massager

各部分具有以下含义

[option]

这是应该被按摩的选项的名称

[sectiongroup]

部分组的名称。这是部分中可选冒号之前的部分。为了匹配没有冒号的部分,请使用global。为了匹配所有部分,请使用*

[section]

应用于此按摩器的部分的名称。如果为空,则使用当前部分。

Buildout特定内容

您可以使用zc.recipe.egg设置自定义的configfile位置,如下所示

[ploy]
recipe = zc.recipe.egg
eggs = ploy
arguments = configpath="${buildout:directory}/etc/", configname="servers.cfg"

变更日志

2.0.1 - 2023-06-19

  • 修复ssh超时处理。[witsch, fschulze]

  • 修复Python 3.x中的getargspec弃用警告。[kappeck, fschulze]

2.0.0 - 2022-08-17

  • 移除对Python 3.6的支持。[fschulze]

  • 添加对Python 3.10的支持。[fschulze]

2.0.0b5 - 2021-07-17

  • 为具有多个主机的实例创建正确的配置副本。[fschulze]

  • 使用format_exc在ssh命令中报告错误,以获取更多详细信息。[fschulze]

2.0.0b4 - 2020-05-13

  • 修复[instance:...]部分的多个主机的关联。[fschulze]

2.0.0b3 - 2019-06-09

  • 一些Python 3.x编码相关修复。[fschulze]

2.0.0b2 - 2019-06-03

  • 为ssh连接添加5秒默认超时。[fschulze]

  • 移除对Python 3.4的支持。[fschulze]

2.0.0b1 - 2018-02-06

  • 支持YAML配置文件。[fschulze]

  • 移除对ssh库的支持,仅支持paramiko。[fschulze]

  • 移除对Python 2.6和3.3的支持。[fschulze]

1.5.2 - 2018-08-20

  • 停止在Python 3.3上进行测试。[fschulze]

  • 修复实例的多个主机的关联。[fschulze]

1.5.1 - 2017-12-17

  • 修复在使用ssh-host-keys时自动获取指纹的问题。[fschulze]

1.5.0 - 2017-10-03

  • 新增ssh-host-keys选项,允许直接设置主机密钥,强制paramiko使用特定密钥类型以避免指纹不匹配。[fschulze]

1.4.0 - 2017-10-02

  • 允许实例实现通过get_fingerprints方法返回多个指纹。[fschulze]

  • 支持除了rsa之外的其他密钥类型,因为paramiko > 2默认使用ed25519。[fschulze]

  • 在指纹不匹配时输出更多关于使用密钥的信息。[fschulze]

1.3.1 - 2016-06-02

  • 如果没有在实例配置中设置,则不从主服务器获取ssh-fingerprints。这修复了EC2、ezjail等自动获取指纹的问题。[fschulze]

1.3.0 - 2016-05-21

  • 添加选项ssh-fingerprints,允许指定多个指纹。[fschulze]

  • 支持新版的ssh-keygen输出,包括哈希类型,默认为SHA256。[fschulze]

1.2.1 - 2015-08-27

  • 允许为每个实例指定多个主服务器。[fschulze]

1.2.0 - 2015-03-05

  • 添加Executor辅助器来处理本地和远程命令执行。它还可以处理由用户ssh配置或ssh-extra-args选项启用的ssh代理转发。[fschulze]

1.1.0 - 2015-02-28

  • 添加ssh-extra-args选项。[fschulze]

  • 添加annotate命令,用于打印带有每个设置来源的配置。[fschulze]

  • 允许在gzip压缩的启动脚本中自定义shebang。[fschulze]

1.0.3 - 2015-01-22

  • 从我们的known_hosts文件中删除不良条目,以防止paramiko失败。[fschulze]

  • 对所有ssh连接设置StrictHostKeyChecking=yes,以防止交互式询问。[fschulze]

1.0.2 - 2014-10-04

  • 在终止实例之前询问。[fschulze]

  • 修复代理实例某些情况下配置设置传播的问题。[fschulze]

  • 在退出前关闭所有连接。这可以防止由打开的代理命令线程引起的挂起。[fschulze]

  • 添加选项以记录调试输出。[fschulze]

  • 为插件添加设置proxycommand的辅助器。[fschulze]

1.0.1 - 2014-08-13

  • 修复纯实例在ssh连接失败时的错误输出。[fschulze]

1.0.0 - 2014-07-19

  • 修复使用非标准ssh端口时删除不良主机密钥的问题。[fschulze]

  • plain-master重命名为plain,以便实例的UID更友好。[fschulze]

1.0rc15 - 2014-07-16

  • 仅从known_hosts中删除不良主机密钥,而不是完全清除。[fschulze]

  • 删除了对proxyhost选项的支持。它会导致在ssh指纹丢失或无效时挂起和失败。[fschulze]

  • 允许将空startup_script选项理解为不使用启动脚本。[fschulze]

1.0rc14 - 2014-07-15

  • 允许将fingerprint设置为公钥主机密钥文件。[fschulze]

1.0rc13 - 2014-07-08

  • 对于未安装插件的实例,提供更好的错误信息。[fschulze]

  • 修复在ploy自身未安装时测试的问题。[fschulze]

1.0rc12 - 2014-07-08

  • 使用plain conftest.py而不是pytest插件。[fschulze]

1.0rc11 - 2014-07-05

  • 修复主实例的uid方法。[fschulze]

1.0rc10 - 2014-07-04

  • 使用-v和--versions打印插件版本。[fschulze]

  • Python 3兼容性。[fschulze]

1.0rc9 - 2014-06-29

  • 让插件通过list命令添加要显示的列表类型。[fschulze]

  • 始终使用serverinstance一致。[fschulze]

  • 始终通过“[master_id]-[instance_id]”的形式以全名方式使实例可访问。如果不存在冲突,则还提供方便的短版本“[instance_id]”。[fschulze]

  • 添加实例ID验证器,限制为字母、数字、破折号和下划线。[fschulze]

  • 将名称从mr.awsome更改为ploy。[fschulze]

1.0rc8 - 2014-06-16

  • 提供有关SSH连接失败的一些更多信息。[fschulze]

1.0rc7 - 2014-06-11

  • 公开一些测试固定值,以便在插件中重用。[fschulze]

  • 添加before_terminate和after_start钩子,并使插件能够轻松添加自己的钩子。[fschulze]

1.0rc6 - 2014-06-10

  • 向ConfigSection类添加get_path方法。[fschulze]

1.0rc5 - 2014-06-09

  • 在BaseInstance上提供辅助方法ssh_args_from_info,以从init_ssh_key提供的信息中获取运行ssh可执行文件的参数。[fschulze]

  • 允许在bsdploy的帮助信息中覆盖命令名称。[fschulze]

  • 使调试命令可用于没有启动脚本的实例。[fschulze]

  • 实例可以提供一个get_port方法来返回默认端口。[fschulze]

  • 在plain实例的init_ssh_key中捕获套接字错误,以打印调试所需的附加信息。[fschulze]

  • 延迟设置配置文件路径,以便在插件中提前使用配置。参看 #29 [fschulze]

1.0rc4 - 2014-05-21

  • 修复[instance:...]部分的massagers。[fschulze]

  • 在ConfigSection.copy中复制massagers,以便在启动脚本中的覆盖能够正常工作。[fschulze]

1.0rc3 - 2014-05-15

  • 仅在必要时获取指纹,这样可以加快连接速度,当known_hosts中的指纹仍然有效时。[fschulze]

1.0rc2 - 2014-05-14

  • 将setuptools-git从setup.py移动到.travis.yml,它只适用于发布和测试。[fschulze]

  • 更多测试。[fschulze]

1.0rc1 - 2014-03-23

  • 测试、增强并记录通过配置添加massagers。[fschulze]

  • 将ec2和fabric集成移入独立的插件。[fschulze]

  • 现在,如果实例属于不同的主实例,则可以具有相同名称的实例,它们将使用主实例的名称作为其名称的前缀。[fschulze]

  • 添加覆盖默认配置名称的可能性。[tomster]

  • 改进proxycommand并记录其用法。[fschulze]

  • 在主实例中使AWS实例可用。这改变了get_masters插件接口。[fschulze]

  • 使用os.execvp而不是subprocess.call。这允许在proxycommand选项中使用assh,这大大简化了其使用。[fschulze]

  • 添加命令插件钩子。[fschulze]

  • proxycommand选项的变量替换现在在instances字典下使其他实例可用,并添加known_hosts。[fschulze]

  • 通过入口点而不是配置中的plugin部分来加载插件。[fschulze]

  • 允许SSH对plain实例的密码回退。[fschulze]

  • 为plain实例添加请求手动指纹验证的选项。[fschulze]

0.13 - 2013-09-20

  • 在所有路径上使用os.path.expanduser,这样可以在配置值中使用~,例如aws密钥。[fschulze]

0.12 - 2013-09-11

  • 不再需要在安全组名称中添加AWS帐户ID。[fschulze]

  • 如果配置中没有定义,则从安全组中删除规则。[fschulze]

  • 允许在配置内部添加自定义配置massagers。[fschulze]

  • 支持块设备映射,以启用使用多个临时磁盘。[fschulze]

  • 在ec2和平凡实例上添加do方法,允许调用fabric命令。[fschulze]

  • 在ec2-master部分中使用PathMassager对access-key-id和secret-access-key进行操作。这可能会破坏这些选项的现有相对路径。[fschulze]

  • 添加对EBS引导实例的支持。[fschulze]

  • 添加 ssh-key-filename 选项以指向 ec2 和普通实例的私钥。 [fschulze]

  • 修复 Fabric 集成以支持 Fabric 的较新版本。 [fschulze]

  • 支持 proxycommand 选项用于普通实例。这也导致了插件 init_ssh_key API 的变化。 [fschulze]

  • 支持从 ~/.ssh/config 中读取 ProxyCommand 用于普通实例。需要 Fabric 1.5.0 和 Paramiko 1.9.0 或更高版本。 [fschulze]

0.11 - 2012-11-08

  • 根据使用的 Fabric 版本支持 sshparamiko 库。 [fschulze]

0.10 - 2012-06-04

  • 添加 ec2-connection,有助于编写不需要连接到服务器但需要访问配置和 AWS 的 Fabric 脚本(如上传内容到 S3)。 [fschulze]

  • 修复使用除 root 之外的用户名进行 dossh 命令时出现的多个问题。 [fschulze]

  • 要求 Fabric >= 1.3.0。 [fschulze]

  • 要求 boto >= 2.0。 [fschulze]

  • 添加启动脚本选项的钩子。 [fschulze]

  • 添加配置钩子的可能性。 [fschulze]

  • 重构以启用不同虚拟化或云提供商的插件。 [fschulze]

  • 添加了大量测试。 [fschulze]

0.9 - 2010-12-09

  • 现在重写也将影响服务器创建,而不仅仅是启动脚本。 [fschulze]

  • 添加了 list 命令,目前仅支持列出 snapshots。 [fschulze]

  • 添加了 delete-volumes-on-terminate 选项,在实例终止时删除从快照创建的卷。 [fschulze]

  • 添加了对实例启动时从快照创建卷的支持。[natea, fschulze]

  • 添加了对 ~/.ssh/config 的支持。这有点受限,因为 paramiko 配置解析器不太好。[fschulze]

  • 添加了 help 命令,提供了一些 zsh 自动补全的信息。[fschulze]

0.8 - 2010-04-21

  • 对于 do 命令,Fabric 选项 reject_unknown_hostsdisable_known_hosts 现在默认为 true。[fschulze]

  • 允许添加普通服务器以供 sshdo 命令使用。[fschulze]

  • 重构 ssh 连接处理,仅在需要时打开网络连接。现在任何不需要连接的 fabric 选项都会立即运行(如 -h-l)。[fschulze]

  • 修复了 start 后的状态输出。[fschulze]

0.7 - 2010-03-22

  • 在 Server 类中添加了 snapshot 方法,以便从 fabfiles 中轻松访问。[fschulze]

0.6 - 2010-03-18

  • 现在可以在 [aws] 部分中指定包含 aws 密钥的文件,并使用 access-key-idsecret-access-key 选项。[fschulze]

  • 添加了 -c/--config 选项以指定要使用的配置文件。[fschulze]

  • 添加了 -v/--version 选项。[tomster (Tom Lazar), fschulze]

  • 现在在启动脚本中的任何变量展开之前,将移除启动脚本中的注释行。[fschulze]

  • 使用 argparse 库代替 optparse 进行更强大的命令行解析。[fschulze]

0.5 - 2010-03-11

  • 通过在文件名中查找 gzip: 前缀来压缩启动脚本。[fschulze]

  • 添加了类似于 zc.buildout 1.4 的宏扩展。[fschulze]

0.4 - 2010-02-18

  • status 中检查控制台输出,并告知用户。[fschulze]

  • 在尝试 ssh 连接到不可用服务器时,显示友好消息而不是堆栈跟踪。[fschulze]

  • 如果启动脚本以#!/bin/sh#!/bin/bash开头,则删除注释行。[fschulze]

  • 删除了startdebug命令的-r选项,并用更通用的-o选项替换。[fschulze]

  • 使启动脚本可选(不是所有AMIs都支持它,特别是Windows AMIs)。[fschulze]

  • stop命令实际上现在只停止一个实例(仅适用于从EBS卷启动的实例),而新的terminate命令现在执行之前stop所做的工作。[fschulze]

  • 当没有控制台输出可供ssh指纹验证时,提供更好的错误信息。[fschulze]

  • 修复了文档中的缩进。[natea (Nate Aune), fschulze]

0.3 - 2010-02-08

  • 删除了do命令输出的[host_string]前缀。[fschulze]

0.2 - 2010-02-02

  • 快照会自动获取包含日期和卷ID的描述。[fschulze]

  • 现在可以使用ssh命令与scp和rsync一起使用。[fschulze]

0.1 - 2010-01-21

  • 初始发布 [fschulze]

支持