在公司里, 常常要远程到很多机器上执行命令。机器列表会逐渐增多, 记忆这么多机器的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登录脚本的更多相关文章

  1. fabric动态获取远程目录列表

    #!/usr/bin/pythonfrom fabric.api import *env.user='root'env.hosts=['172.10.224.183','172.10.224.132' ...

  2. git 更新远程分支列表

    git remote update origin --prune git remote update origin -p

  3. ssh-copy-id 命令自动复制本机公钥到远程机器

    ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized ...

  4. Android UI:机智的远程动态更新策略

    问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有 ...

  5. Python操作远程机器

    操作远程机器主要使用的有paramiko,WMI(Windows Management Instrumentation),SMBConnection. paramiko paramiko使用SSH2协 ...

  6. 基于Python实现matplotlib中动态更新图片(交互式绘图)

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  7. Python 软件热更新

    Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...

  8. 用最复杂的方式学会数组(Python实现动态数组)

    Python序列类型 在本博客中,我们将学习探讨Python的各种"序列"类,内置的三大常用数据结构--列表类(list).元组类(tuple)和字符串类(str). 不知道你发现 ...

  9. JSPatch – 动态更新iOS APP

    原文:http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的 ...

随机推荐

  1. Odoo Xml Datetime 类型显示为 Date类型

    <field name='date_order' widget='date'/> 利用date widget即可使dateime类型的显示为date.

  2. Java 获取当前系统时间方法比较

    转载: http://blog.csdn.net/zzjjiandan/article/details/8372617 一. 获取当前系统时间和日期并格式化输出: import java.util.D ...

  3. 用JAVA写一个日历计划

    效果图(自己需要在前台加css修饰)

  4. Vue.js组件示例

    一 外部引入文件:(全局注册) //建模版 var mycomponent=Vue.extend( {template:"<div><a href='#'>我爱Jav ...

  5. SQL server 子查询、设置主键外键、变量及变量查询

    一.子查询 子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这 ...

  6. JPA入门例子(采用JPA的hibernate实现版本)

    (1).JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了目前Java持久化技术的优 ...

  7. Android课程---Activity的创建

    一.为了创建一个新的Activity,你需要继承Activity类,定义UI,实现功能.新的Activity的最基本的框架代码如下所示: package com.paad.myapplication; ...

  8. Color Space: HSI

    HSI色彩空间是从人的视觉系统出发,用色调(Hue).色饱和度(Saturation或Chroma)和亮度 (Intensity或Brightness)来描述色彩.HSI色彩空间可以用一个圆锥空间模型 ...

  9. Mysql5.5命令行修改密码

    今天下载了mysql5.5.45免安装版,配置好之后发现mysql默认是没有设置密码的,也就是密码为空. 如果是本机作开发测试用,有无密码倒也无所谓,不过发布在服务器上没有密码肯定是不行的,那就需要设 ...

  10. java FileLock

    import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.nio.channels.FileChannel; import ...