将do dropts与ssh配置结合起来

do-to-ssh-config的Python项目详细描述


数字海洋->;ssh配置

取决于https://github.com/koalalorenzo/python digitalocean,可以使用pip3 install-u python digitalocean安装

这个python 3脚本将帮助您保持ssh配置与数字海洋水滴同步

$ python3 do_to_ssh_config.py production

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

✓ Done, 11 droplets synced

功能

  • 根据液滴的do标记,为每个液滴支持不同的ssh密钥
  • 使用不同的配置,可以在ssh配置的不同部分中编写

如何

步骤1:创建json配置文件

保存在~/.config/do_to_ssh_config/<;name>;.json,其中<;name>;是您要如何调用它的,例如生产测试或其他任何位置。在这个例子中,我将使用production

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

注意:这是最简单的配置文件,对每个液滴和液滴名称使用与主机相同的键,有关更多选项,请继续阅读。

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

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

上面的json配置包含startmarkendmark。这些应该在ssh配置中的某个地方,可以是您想要的任何东西(不过,对于ssh配置注释,可以从开始):

# DO production
# /DO production

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

第3步:运行脚本

$ python3 do_to_ssh_config.py production

· Reading /home/alex/.config/do_to_ssh_config/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

如果您自动生成了从液滴名称派生的难看的主机名,则可以改为使用液滴标记;请继续阅读。

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

  • 更改键。默认值。键设置

我想使用不同的ssh密钥每滴标签!

  • 更改键.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-"}

重要信息:一个液滴可以有多个标签,这就是为什么这里有一个名为"优先级"的字段。在上面的示例中,如果液滴同时具有控制中心领事服务器标记,则它将使用具有更高优先级的键(此处为控制中心)。如果液滴没有标记或其标记未出现在标记中,则使用默认键。

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

# 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

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

注意:水滴名称在每个条目的第一行中仍显示为注释

注意:如上例所示,如果两个或多个液滴共享同一个标记,则会在主机值后面附加一个升序数字。

现在,您可以使用ssh的tab completion轻松查看所有内容,并连接到任何位置:

$ 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/do下创建不同的配置文件_要使用ssh_config/,每个用例一个,比如production.jsontesting.json。对于每个用例,使用不同的主机前缀将非常有用。

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

$ python3 do_to_ssh_config.py production

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

✓ Done, 11 droplets synced
0

现在如果您运行

$ python3 do_to_ssh_config.py production

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

✓ Done, 11 droplets synced
1

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

$ python3 do_to_ssh_config.py production

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

✓ Done, 11 droplets synced
2

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

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

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java当用户按下“回车”键或空格键时,会弹出错误消息   java我可以在多个地方使用相同的片段吗?   java垃圾收集技术中使用的通用数据结构   java如何从子类访问超类对象?   java如何删除点(.)使用正则表达式的电子邮件地址中的字符   javagoogleplacesapi:placesClient。findAutocompletePredictions返回任务失败   java为什么整数长度程序中的循环代码会跳过   java创建不同的Deck对象   java如何将RGB值添加到其颜色名称中?   对象Java“按下按钮”,每次按下时具有不同的操作   java通过Lombok将返回类型绑定到超类型   java如何在数组中映射对象等。。。和弗罗姆森在一起?   java如何从JAXWS(JAX_RS)中的json请求中获取动态字段   多态性Java类型细化映射   java将意向值从通知传递给活动类   为什么带有未初始化成员变量的类可以在java中编译?   等待java完成异步任务   java logback无行结束分隔符   java使JSVGScrollPane内的JSVGCanvas与SVGDocument大小匹配   嵌套Json中的java数据表