阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 842阅读
  • 0回复

[解决方案]开源-服务器登录小工具

级别: 论坛版主
发帖
371
云币
447

一个使用 Go 编写的简单多服务登录管理小工具. 1&pP}v ?  
UO!6&k>c  
g5|\G%dOt  
安装 -*q2Y^A^l  
可直接从 release 页下载预编译的二进制文件,然后执行 mmh install (需要root 权限,动请求 sudo)即可;卸载直接执行 mmh uninstall,卸载命令不会删除 ~/.mmh 配置目录。 P~ZV:Of  
%dU'$)  
?~Ed n-" Y  
默认安装到 /usr/bin 目录下,如果受权限限制无法安装,请使用 --dir 选项指定其他安装目录 >(ww6vk2  
yaXa8v'oC  
r= | |sZs  
基本命令 U`p<lxRgQ  
  1. ➜  ~ mmh --help
  2. A simple Multi-server ssh tool.
  3. Usage:
  4.   mmh [flags]
  5.   mmh [command]
  6. Available Commands:
  7.   cp          Copies files between hosts on a network
  8.   ctx         Change current context
  9.   exec        Batch exec command
  10.   go          Login single server
  11.   help        Help about any command
  12.   install     Install mmh
  13.   server      Server command
  14.   uninstall   Uninstall mmh
  15.   version     Print version
  16. Flags:
  17.   -h, --help   help for mmh
  18. Use "mmh [command] --help" for more information about a command.
,k!f`  
#R PB;#{  
&2]D+aL|h  
配置文件 0fK|}mmZA  
从 v1.3.0 版本开始,支持多配置文件切换功能;安装完成后将会自动在 $HOME/.mmh 下创建样例配置,默认配置文件结构如下 Msu2OF *x  
q8bS@\i  
n4&j<zAV{  
  1. ➜  ~ tree .mmh
  2. .mmh
  3. ├── default.yaml
  4. └── main.yaml
  5. main.yaml
RcM0VbR"EU  
4H=sD t  
a&VJ YAB  
主配置文件结构如下 :{uUc  
(3r,PS@Qq@  
G&3<rT3Ib  
  1. context:
  2.   default:
  3.     config_path: ./default.yaml
  4. context_auto_downgrade: default
  5. context_timeout: 30m
  6. context_use: default
  7. context_use_time: 2018-12-02T19:50:44.681871+08:00
3'e 4{  
#}yFHM?i  
-XG$ 0  
主配置文件中可以配置多个 context,由 context_use 字段指明当前使用哪个 context,在每个 context 下执行完命令都会刷新 context_use_time 时间戳;如果同时配置了 context_timeout 和 context_auto_downgrade 字段,每次执行命令前都会检查上次使用时间距今是否超过了 context_timeout,如果超过则将会自动回退到 context_auto_downgrade 指定的 context;这样可以避免长时间停留在某个重要的 context 上从而造成误操作(比如线上环境) 0U*"OSpF  
l>?vjy65  
N,Bs% p#1  
default.yaml ( +hI   
这个是真正的 SSH 配置,一般情况下其与对应的 context 名称相同;该配置文件样例如下 k $&A  
Q^w]Nj(e_  
ClZyQ=UAD  
  1. basic:
  2.   user: root
  3.   password: ""
  4.   privatekey: /Users/mritd/.ssh/id_rsa
  5.   privatekey_password: ""
  6.   port: 22
  7.   proxy: ""
  8. maxproxy: 5
  9. servers:
  10. - name: prod11
  11.   tags:
  12.   - prod
  13.   user: root
  14.   password: password
  15.   privatekey: ""
  16.   privatekey_password: ""
  17.   server_alive_interval: 20s
  18.   address: 10.10.4.11
  19.   port: 22
  20.   proxy: prod12
  21. - name: prod12
  22.   tags:
  23.   - prod
  24.   user: root
  25.   password: ""
  26.   privatekey: /Users/mritd/.ssh/id_rsa
  27.   privatekey_password: password
  28.   server_alive_interval: 10s
  29.   address: 10.10.4.12
  30.   port: 22
  31.   proxy: ""
  32. tags:
  33. - prod
  34. - test
*~^^A9C8  
kxwm08/|f  
<!>}t a  
basic 段为默认配置,用于在 servers 段中某项配置不存在时进行填充;servers 段中可以配置 N 多个服务器(server);每个 server 除了常规的 SSH 相关配置外还增加了 proxy 字段用于支持无限跳板(具体见下文);tag 字段必须存在于在下面的 tags 段中,该配置主要是为了给服务器打 tag 方便批量复制与执行;maxproxy 是一个数字,用于处理当出现配置错误导致 "真·无限跳板" 情况时自动断开链接 E_rC"_Zte  
:+!b8[?Z  
li P{Mu/LO  
自动登录 v72 dE  
可以使用 mgo SERVER_NAME 直接登录,如需交互式登录可执行 mmh 即可;其他相关命令如 mms ls/add/del 都与添加修改服务器配置相关,请自行尝试: M0 8Y  
RR=l&uT  
9ksrr{tW  
mmh >C3 9`1  
-h`0v  
b;l%1x9r  
无限跳板 _Z2)e*(  
在每个服务器配置中可以设置一个 proxy 字段,当登录带有 proxy 字段的服务器时,工具会首先链接代理节点进行跳转; 这种能力方便于在使用跳板机的情况下无感的直连跳板机之后的主机;并且其支持无限的跳板登录,如 A、B、C 三台机器, 如果 C 的 proxy 设置为 B,同时 B 的 proxy 设置为 A,那么实际在登录 C 时,工具实际连接顺序为: local->A->B->C yqI|BF`  
V'/%)oU\"  
jQ}| ]pj+  
不要去尝试循环登录,比如 A->B->C->A 这种配置,工具内部已经做了检测防止产生这种 "真·无限跳板" 的情况, 默认最大跳板机数量被限制为 5 台,可通过在配置文件中增加 maxProxy 字段进行调整 +JG"eh&J"H  
]XyJ7esg  
,u2<()`8D  
管道式批量执行 {Aw3Itef  
在某些情况下可能需要对某些机器执行一些小命令,工具提供了 mec 命令用于批量执行命令: E5Jk+6EcMa  
Yg.u8{H  
+ETw:i9!?  
  1. ➜  ~ mec --help
  2. Batch exec command.
  3. Usage:
  4.   exec SERVER_TAG CMD [flags]
  5. Aliases:
  6.   exec, mec
  7. Flags:
  8.   -h, --help     help for exec
  9.   -s, --single   single server
N2J!7uoQ  
IA `  
j"s(?  
在配置文件中每个服务器可以配置多个 tag,mec 默认对给定的 tag 下所有机器执行命令,如需对单个机器执行请使用 -s 选项; 该命令目前支持管道处理和持续执行,比如批量执行 tail -f 命令等;除此之外还可以配合 grep 等命令进行自由发挥: MJ08@xGa  
$@;[K \  
]S ,GHPEN  
默认在批量执行模式下,每行输出前会加入当前服务器的名称前缀,在 v1.1.0 版本调整了颜色渲染代码,从而支持了前缀顺次颜色变换 (不会出现两个相邻服务器名字颜色一样的情况);在单服务器下则每行输出不显示当前服务器前缀 _Tz!~z  
%xz02$k  
5Ncd1  
mec U+ =q_ <  
pE N`&'4  
H#E0S>Jw|  
批量复制 e>.xXg6Zn  
为了尽量方便使用,模仿了一下 scp 命令,增加了批量复制功能 mcp;批量复制支持 本地到远端多机器的文件/目录批量复制 和 单一远端机器到本地的文件/目录复制; M(f'qFY=K  
r_m&Jl@4  
?M2@[w8_  
  1. ➜  ~ mcp --help
  2. Copies files between hosts on a network.
  3. Usage:
  4.   cp [-r] FILE/DIR|SERVER_TAG:PATH SERVER_NAME:PATH|FILE/DIR [flags]
  5. Aliases:
  6.   cp, mcp
  7. Flags:
  8.   -r, --dir      useless flag
  9.   -h, --help     help for cp
  10.   -s, --single   single server
sx\7Z#|  
bX1ip2X lk  
iy9]Y5b   
注意: 批量复制并不可靠,请谨慎使用;并非说代码不可靠,只是相对来说对于登录等功能,即使工具出问题,也很难造成灾难性后果; 但是复制功能是有能力造成文件覆盖的,从而造成灾难性后果;所以请谨慎使用,目前只针对常规情况作了大部分测试。 ."O(Ig[  
<0m;|Ai'W  
t {}1 f  
mcp sJWwkR  
ZHJzh\?  
OH w6#N$\  
多环境切换 PdZSXP4;k  
考虑到同时将多个环境的配置放在同一个配置文件中会有混乱,同时也可能出现误操作的情况,v1.3.0 版本增加了 context 的概念;每个 context 被认为是一种环境,比如 prod、test、uat 等,每个环境的机器配置被分成了独立的文件以方便单独修改与加载;控制使用哪个 context 可以使用 mcx use CONTEXT_NAME 命令 p\K5B,  
MNzq}(p  
14R))Dz"  
  1. ➜  ~ mcx --help
  2. Change current context.
  3. Usage:
  4.   ctx [flags]
  5.   ctx [command]
  6. Aliases:
  7.   ctx, mcx
  8. Available Commands:
  9.   help        Help about any command
  10.   ls          List context
  11.   use         Use context
  12. Flags:
  13.   -h, --help   help for ctx
  14. Use "ctx [command] --help" for more information about a command.
&AVi4zV  
cg5DyQ(  
x@=7M'vr%  
同时又增加了 context 自动回退功能,即给定一个超时时间,当在给定的超时时间内无操作(不会强行断开任何命令),下次操作将会自动回退到指定的 context,具体请参考上文配置段 q'q{M-U<  
Lnzhs;7L  
Sy_M!`B  
[ 此帖被寒喵在2019-01-01 00:37重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)