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 [ ]
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 [ ]
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
)
ssh qin.shuq@127.0.0.0.
;;
)
ssh qin.shuq@1.1.1.1
;;
)
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
python实现动态更新远程机器列表的SSH登录脚本的更多相关文章
- fabric动态获取远程目录列表
#!/usr/bin/pythonfrom fabric.api import *env.user='root'env.hosts=['172.10.224.183','172.10.224.132' ...
- git 更新远程分支列表
git remote update origin --prune git remote update origin -p
- ssh-copy-id 命令自动复制本机公钥到远程机器
ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized ...
- Android UI:机智的远程动态更新策略
问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有 ...
- Python操作远程机器
操作远程机器主要使用的有paramiko,WMI(Windows Management Instrumentation),SMBConnection. paramiko paramiko使用SSH2协 ...
- 基于Python实现matplotlib中动态更新图片(交互式绘图)
最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...
- Python 软件热更新
Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...
- 用最复杂的方式学会数组(Python实现动态数组)
Python序列类型 在本博客中,我们将学习探讨Python的各种"序列"类,内置的三大常用数据结构--列表类(list).元组类(tuple)和字符串类(str). 不知道你发现 ...
- JSPatch – 动态更新iOS APP
原文:http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的 ...
随机推荐
- [LintCode] Mini Twitter 迷你推特
Implement a simple twitter. Support the following method: postTweet(user_id, tweet_text). Post a twe ...
- android-Spinner的学习和使用
Spinner下拉列表的使用和功能 执行步骤: * 1.添加一个下拉列表项的list * 2.为下拉列表定义一个数组适配器(ArrayAdapter),添加数据资源 * 3.位适配器设置下拉列表下拉时 ...
- scala - Map基础
Map 构造Map 不可变: val map = Map("sa" -> 1, "s" -> 2)map("sa") = 3 / ...
- 创造tips的秘籍——PHP回调后门
作者:Phithon 原文连接:https://www.leavesongs.com/PENETRATION/php-callback-backdoor.html 最近很多人分享一些过狗过盾的一句话, ...
- java四种内部类详解
一般来说,有4中内部类:常规内部类.静态内部类.局部内部类.匿名内部类. 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中. 1.常规内部类中的方法可以直接使用外部类的实例变 ...
- bzoj4457: 游戏任务--双层01背包
这题和NOIP的金明的预算方案(?)很像,只不过附件的数量增多了 如果对主件进行一次01背包,再套一层附件的01背包O(n4)肯定会爆.. 所以我们可以先预处理出,对于每个主件,花的时间为k的情况下, ...
- 2016huas暑假集训训练题 G-Who's in the Middle
题目链接:http://acm.hust.edu.cn/vjudge/contest/121192#problem/G 此题大意是给定一个数n 然后有n个数 要求求出其中位数 刚开始以为是按数学中的 ...
- Oracle中有个tkprof来格式化oracle的trace文件
1.MySQL日志文件系统的组成2.慢查询日志3.慢查询日志演示long_query_time : 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10sslow_query_lo ...
- IOS第一天多线程-05GCD队列的使用
************** // // HMViewController.m // 08-GCD02-队列的使用(了解) // // Created by apple on 14-9-15. // ...
- easyUI datagrid笔记
easyUI datagrid 简单使用与注意细节 背景: 业余爱好,使用了一下easyUI的搜索框与数据表格,并把两者整合起来进行使用. 使用前提(引入需要的js and css): <lin ...