Skip to main content

将 DO 液滴与您的 ssh 配置相结合

项目描述

数字海洋 -> ssh 配置

安装

python3 -m pip install python-digitalocean-ssh

独立运行,这个 python 3 脚本将帮助你保持你的 ssh 配置与你的数字海洋水滴同步

$ python3 -m digitalocean_ssh production

· Reading /home/alex/.config/python-digitalocean-ssh/production.json
· Parsing /home/alex/.ssh/config
· Fetching droplets from DO
· Writing into your ssh config file

✓ Done, 11 droplets synced

特征

  • 支持每个 droplet 的不同 ssh 密钥,具体取决于 droplet 的 DO 标签
  • 适用于不同的配置,并且可以写入 ssh 配置的不同部分

如何

第一步:创建json配置文件

把它保存在~/.config/python-digitalocean-ssh/<name>.json<name>你想怎么称呼它,例如productionortesting或其他任何东西。对于这个例子,我将使用production.

{
    "token": "DIGITAL_OCEAN_READ_ONLY_TOKEN_HERE",
    "keys": {
        "tagToKey": {
        },
        "default": {
            "key": "common",
            "priority": 0
        }
    },
    "startMark": "# DO production",
    "endMark": "# /DO production",
    "hostPrefix": "do-prod-"
}

注意:这是最简单的配置文件,它对每个液滴和液滴名称使用相同的键,如欲Host了解更多选项,请继续阅读。

  1. 在此处生成新的个人 DO API 只读访问令牌
  2. hostPrefix是为通过此配置加载的每个液滴在 ssh 配置中的键中添加的前缀Host,可以是您想要的任何内容

第 2 步:在 ssh 配置中添加 2 个标记

上面的 json 配置包含startMarkendMark。这些应该在您的 ssh 配置中的某个位置,并且可以是您想要的任何内容(#不过,从 ssh 配置注释开始):

# DO production
# /DO production

在这两个标记之间,脚本将删除所有内容并添加新条目。注意不要在这两个标记之间添加您自己的主机。

第三步:运行脚本

$ python3 -m digitalocean_ssh production

· Reading /home/alex/.config/python-digitalocean-ssh/production.json
· Parsing /home/alex/.ssh/config
· Fetching droplets from DO
· Writing into your ssh config file

✓ Done, 11 droplets synced

现在您的 ssh 配置将如下所示:

# DO production
Host do-prod-control-center1517024146
    # control-center1517024146
    Hostname X.X.X.X
    IdentityFile ~/.ssh/common
    User user
Host do-prod-control-center1517027030
    # control-center1517027030
    Hostname X.X.X.X
    IdentityFile ~/.ssh/common
    User user
... 9 more entries
# /DO production

如果您有Host从液滴名称派生的自动生成的丑陋名称,则可以使其与液滴标签一起使用;继续阅读。

将此用作模块

使用适当位置的配置文件,您可以将其用作模块来创建强大的 python 脚本:

from digitalocean_ssh import DO
import sys

client = DO(True) # enable debugging

config_type = sys.argv[1] # must pass the configuration type as an argument, e.g. 'production'

config = client.get_config(config_type)
ssh_config = client.parse_ssh_config(config)
droplets = client.fetch_droplets(config)

print(droplets) # DO droplets with combined ip/tags/ssh config information

我想使用不同的 ssh 密钥,不是common

  • 更改keys.default.key设置

我想为每个 droplet 标签使用不同的 ssh 密钥!

  • 更改keys.tagToKey设置并添加如下条目:
"control-center": {
    "key": "cc_prv",
    "priority": 7
},
"consul-server": {
    "key": "cs_prv",
    "priority": 6
},
"postgres-master": {
    "key": "common",
    "priority": 5
}

最终配置将如下所示:

{
    "token": "DIGITAL_OCEAN_READ_ONLY_TOKEN_HERE",
    "keys": {
        "tagToKey": {
            "control-center": {
                "key": "cc_prv",
                "priority": 7
            },
            "consul-server": {
                "key": "cs_prv",
                "priority": 6
            },
            "postgres-master": {
                "key": "common",
                "priority": 5
            }
        },
        "default": {
            "key": "common",
            "priority": 0
        }
    },
    "startMark": "# DO production",
    "endMark": "# /DO production",
    "hostPrefix": "do-prod-"
}

重要提示:一个水滴可以有多个标签,这就是为什么那里有一个字段priority。在上面的例子中,如果一个 droplet 同时具有control-centerconsul-server标签,它将使用具有更高优先级的键(这里control-center)。如果一个 droplet 没有标签或者它的标签没有出现在 中tagToKey,它将使用默认键。

对于匹配特定标签的液滴,现在Hostssh 配置中的将具有标签的名称,而不是液滴名称:

# DO production
Host do-prod-control-center
    # control-center1517024146
    Hostname X.X.X.X
    IdentityFile ~/.ssh/cc_prv
    User user
Host do-prod-control-center2
    # control-center1517027030
    Hostname X.X.X.X
    IdentityFile ~/.ssh/cc_prv
    User user
... more entries
# /DO production

这对于自动生成液滴名称的大型环境很方便

注意:液滴名称仍然作为注释在每个条目的第一行可见

注意:如上例所示,如果 2 个或多个液滴共享同一个标签,则在该Host值后附加一个升序数字。

现在您可以使用 ssh 的 tab 补全轻松查看所有内容,并在任何地方连接:

$ ssh do-prod- <hit TAB key twice>

do-prod-control-center   do-prod-mongodb  do-prod-load-balancer    do-prod-nodejs2          do-prod-postgres-slave   do-prod-blog
do-prod-control-center2  do-prod-landing-page     do-prod-nodejs           do-prod-postgres-master  do-prod-redis            

我有生产测试,我在 10 家不同的公司工作!

只需在 下创建不同的配置文件~/.config/python-digitalocean-ssh/,为您的每个用例创建一个配置文件,例如production.jsontesting.json. hostPrefix为每个用例设置不同的内容会很有用。

此外,在您的 ssh 配置文件中添加不同的标记,例如:

# DO production
# /DO production

# 做测试
# /做测试

现在如果你跑

$ python3 -m digitalocean_ssh production

它将继续读取production.json并写入您的 ssh 配置中的相应标记。如果你跑

$ python3 -m digitalocean_ssh testing

它将继续读取testing.json和写入相应的标记。

我可以随时安全地重新运行脚本吗?

是的,前提是您没有在配置中指定的标记之间包含您的任何条目。每次脚本运行时,标记之间的所有内容都会被删除。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

python-digitalocean-ssh-0.0.8.tar.gz (5.7 kB 查看哈希

已上传 source

内置分布

python_digitalocean_ssh-0.0.8-py3-none-any.whl (5.9 kB 查看哈希

已上传 py3