将 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了解更多选项,请继续阅读。
- 在此处生成新的个人 DO API 只读访问令牌
hostPrefix是为通过此配置加载的每个液滴在 ssh 配置中的键中添加的前缀Host,可以是您想要的任何内容
第 2 步:在 ssh 配置中添加 2 个标记
上面的 json 配置包含startMark和endMark。这些应该在您的 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-center和consul-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.json和testing.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-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | fabe74d266a8ac8bda6467df63db046d12bd25bc3c559cdc792767ee0089a844 |
|
| MD5 | fd5bbe96bee6bab7f4be987848e3e826 |
|
| 布莱克2-256 | adf1d499cb686d439b410792978877679cb7cf20c6c6a6ace601b643e73bab6d |