日常服务器运维中,很多情况下,我们得登录到远程,当服务器一旦多了之后,管理还是挺麻烦的。之前一直用的SSH Shell这个小工具,一直用的挺顺畅,直到看到它在不断接收文本太多之后一次又一次奔溃,终于打算放弃。
后来仔细回想,似乎iTerm 2的Profile的就能达到类似的效果:
- 新建Profile,在"Send text at start"中输入"ssh host",保存;
CMD + O,选择host,确定,就可以直接连到服务器上面;
只是,那么多的profile要我手工录入无异于侮辱我是个工程师的身份。
赶紧问谷老哥,恩,『自从iTerm2版本2.9.20140923之后,增加了个Dynamic Profile的功能』,简单来说,你需要根据特定的格式,xml或者json,提供一个配置文件,然后iTerm2会直接自动加载。只是!!!需要你来生成这个配置文件,恩,二话不说,毕竟在装逼的路上,咱得不点鼠标,少敲键盘。
本来想着,干脆开脚本做个工具,但是!!!我是懒人好不,写个脚本费事不,有现成工具不用作甚!
⚠️ 接下来继续的话需要以下几个基础知识:
- ansible (常用运维工具)
- js-beautify (Node.js格式化代码工具)
首先,根据提示,为了制作这个profile.json(输出),我们需要根据先用的host列表来生成(输入)。很自然的想到,目前是根据inventory来管理hosts列表的,那么,我们是不是可以根据这个来直接生成呢?
对的,用ansible的template module:
# profile.j2
{
"Profiles": [
{% for group in groups %}
{% if group != 'all' %}
{% for host in groups[group] %}
{
"Name" : "{{host}}",
"Guid" : "{{group}}-{{host}}",
"Initial Text" : "ssh {{host}} tmux a",
"Tags": ["{{group}}"]
},
{% endfor %}
{% endif %}
{% endfor %}
]
}
然后一条命令搞定:
ansible localhost -m template -a "src=./profile.j2 dest=./profile.json" --connection=local
接下来作为强迫症的我,必须要format一下:
js-beautify -r -s 2 ./profile.json
会有个小问题,因为上面的模板中,最后个元素后面还有逗号,严格来说是不允许的,但是iTerm2不介意,所以不用管。
然后移到目录即可:
mv ./profile.json /Users/x/Library/Application\ Support/iTerm2/DynamicProfiles/
现在,CMD + O,直接输入host名称,按确定,立马连上,那叫一个爽~
另外,不妨看看iTerm2上面的Profiles选项,你会看到,上面的组织方式,完全是按照你在inventory上面的分组一致,恩,不谢~