python实现动态更新远程机器列表的SSH登录脚本
在公司里, 常常要远程到很多机器上执行命令。机器列表会逐渐增多, 记忆这么多机器的IP或域名显然不是人脑所擅长的。因此, 需要保持一份SSH机器列表,从这些机器列表生成一个用于SSH到机器列表中机器的脚本, 执行该脚本就可以SSH到指定机器上。
必需文件: sshlist.txt, ssh_tpl.sh , updatessh.py ; 输出文件: ssh.sh
SSH 机器列表: sshlist.txt
127.0.0.0.1 ; 本地测试 1.1.1.1 ; 开发环境 2.2.2.2 ; 测试环境
SSH 脚本模板: ssh_tpl.sh
需要以机器列表生成的内容分别替换 ${ChooseList} 和 ${SSHList}
#!/bin/sh while [ 1 ] do echo "Choose host: " ${ChooseList} read INPUT_VALUE case "$INPUT_VALUE" in ${SSHList} *) echo -e "\033[43;31m invalid params-$INPUT_VALUE \033[0m"; ;; esac done
生成最终SSH登录脚本的 python 程序: updatessh.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------- # Name: updatessh.py # Purpose: reads ssh list from sshlist.txt , replaces contents of ssh_tpl.sh # and finally build a ssh.sh file to ssh specific machines # # # Author: qin.shuq # # Created: # Output: ssh.sh #------------------------------------------------------------------------------- sshTplFilename = "ssh_tpl.sh" sshlistFilename = "sshlist.txt" sshscriptFilename = "ssh.sh" username = "qin.shuq" def readSSHList(): f = open(sshlistFilename) sshMachineList = [] i = 1 for line in f: sshIp, comment = tuple(line.split(';')) sshMachineList.append((i, sshIp.strip(), comment.strip())) i+=1 f.close() return sshMachineList def readFile(filename): f = open(filename) contents = '' for line in f: contents += line f.close() return contents def readSSHTpl(): return readFile(sshTplFilename) def main(): sshMachineList = readSSHList() chooseListContents = '' sshListContents = '' for (i, sshIp, comment) in sshMachineList: chooseListContents += "echo \" %d. %s ( %s ) \" \n" % (i, sshIp, comment) sshListContents += "\t%d) \n\t\tssh %s@%s\n \t\t;; \n" % (i, username, sshIp) sshtplContents = readSSHTpl() sshtplContents = sshtplContents.replace("${ChooseList}", chooseListContents).replace("${SSHList}", sshListContents) sshScriptFile = open(sshscriptFilename, 'w') sshScriptFile.write(sshtplContents) sshScriptFile.close() if __name__ == '__main__': main()
最终生成的SSH登录脚本: ssh.sh
#!/bin/sh while [ 1 ] do echo "Choose host: " echo " 1. 127.0.0.0.1 ( 本地测试 ) " echo " 2. 1.1.1.1 ( 开发环境 ) " echo " 3. 2.2.2.2 ( 测试环境 ) " read INPUT_VALUE case "$INPUT_VALUE" in 1) ssh qin.shuq@127.0.0.0.1 ;; 2) ssh qin.shuq@1.1.1.1 ;; 3) ssh qin.shuq@2.2.2.2 ;; *) echo -e "\033[43;31m invalid params-$INPUT_VALUE \033[0m"; ;; esac done
使用:
当需要添加新的SSH机器时, 加入到 sshlist.txt , 以分号隔开 ip 地址 和 注释。 然后执行 python updatessh.py 即可生成最终用于登录的 ssh.sh 脚本。
为了少敲几个字符, 可以做个软连接: ln -s ssh.sh /usr/bin/s
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了