`
chencang
  • 浏览: 421916 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[Python]一个用ssh来远程登录多台机器并执行命令的脚本

阅读更多

Kids Return: [Python ]一个用ssh 来远程登录 多台机器并执行命令的脚本

[Python ]一个用ssh 来远程登录 多台机器并执行命令的脚本 .... 阅读器无法显示某些pdf文档的中文问题 · Ubuntu以及MacOS下使用街机模拟 器Mame · [Python ]Python 3.0来了 ...
apc999.blogspot.com/2009/01/python _19.html - 网页快照 - 类似结果
来源:apc999.blogspot.com/2009/01/python _19.html(以上为GOOGLE搜索结果,因blogspot被墙了,故转载止此处,供己收藏,亦与众分享)

功能类似于multissh。事实上我也抄了这个名字//grin。
要求安装了pexpect 这个包先。
用法见usage:
Usage: ./multissh.py -f cmdfile -l username -c cmd -n nodesfile -v -r
execut cmd on remote hosts (all hosts in ./hosts.txt by default)
-v verbose
-r recording hosts on which mission succeeded and failed
-l username
-c cmd to be executed remotely
-n file containing the nodes
-f file conaining the cmd
-h show the usage
就是指定一个文件比如nodes.txt以及命令以后,它可以自动登录 到nodes.txt包含的节点里执行命令。可以在源文件里替换进你自己的密码,也可以使用公钥密钥登录 不需输入密码。指定了v选项的话得到在远端每台主机上的详细输出。指定了r选项的话记录下那些节点成功那些节点失败。
我前面的帖子里有关于ansi_color的一个脚本,拿过来可以配合使用得到彩色输出
   1. #!/usr/bin/python 
   2. import sys  
   3. import os  
   4. import getopt  
   5. import pexpect  
   6. try:  
   7.    from ansi_color import * #就是我前面帖子里关于ansi_color的几个定义  
   8. except ImportError:  
   9.    def color_str(s, *args):  
  10.        return s  
  11.    fg_green = None  
  12.    fg_red = None  
  13.    fg_blue = None  
  14. password="123456" #替换成你自己的密码。  
  15. def do(cmds, dst, username, outfile):  
  16.    global verbose, is_quiet, good_hosts  
  17.    print "executing \"%s\""%(repr(cmds))  
  18.    try:  
  19.        prompt = "^.*\(.*\):|\$"  
  20.        hostname = dst  
  21.        sshcmd = '<b style="color: black; background-color: rgb(153, 255, 153);">ssh</b> %s'%(hostname)  
  22.        if username != None:  
  23.            sshcmd = sshcmd + " -l %s"%username  
  24.        s = pexpect.spawn(command=sshcmd, timeout=20)  
  25.        s.logfile_read = outfile  
  26.        s.setecho(True)  
  27.        i = -1  
  28.        while (i<>0):  
  29.            i = s.expect([prompt,"Are you sure you want to continue connecting (yes/no)?","Password:"])  
  30.            if i == 1:  
  31.                s.sendline("yes")  
  32.            elif i == 2:  
  33.                s.sendline(password)  
  34.        for cmd in cmds:       
  35.            s.sendline(cmd)  
  36.            s.expect(prompt)  
  37.        s.sendline("exit")  
  38.        s.close()  
  39.        if verbose:  
  40.            print  
  41.        print "["+color_str("OK!", fg_green)+"]"  
  42.        if recording:  
  43.            print>>f_good, hostname  
  44.            f_good.flush()  
  45.        good_hosts.append(hostname)  
  46.    except pexpect.ExceptionPexpect:  
  47.        if verbose:  
  48.            print  
  49.        print "["+color_str("Fail!", fg_red)+"]"  
  50.        if recording:  
  51.            print>>f_bad, hostname  
  52.            f_bad.flush()  
  53.        bad_hosts.append(hostname)  
  54. def print_usage():  
  55.    print "Usage:\t ./make_do.py -f cmdfile -l username -c cmd -n nodesfile -v -r"  
  56.    print "execut cmd on remote hosts (all hosts in ./hosts.txt by default)"  
  57.    print "\t-v verbose"  
  58.    print "\t-r recording hosts on which mission succeeded and failed"  
  59.    print "\t-l username"  
  60.    print "\t-c cmd to be executed remotely"  
  61.    print "\t-n file containing the nodes"  
  62.    print "\t-f file conaining the cmd"  
  63.    print "\t-h show the usage"  
  64.    sys.exit(-1)  
  65. if __name__ == "__main__":  
  66.    try:  
  67.        opts, args=getopt.getopt(sys.argv[1:], "l:f:n:c:vhr",["login_name", "cmdfile","nodesfile","command","help","verbose", "recording"])  
  68.    except getopt.GetoptError, err:  
  69.        print str(err)  
  70.        print_usage()  
  71.    if opts == [] and args == []:  
  72.        print_usage()  
  73.    hosts = None  
  74.    cmds = None  
  75.    outfile = open("/dev/null", "w")  
  76.    verbose = False  
  77.    username = None  
  78.    recording = False  
  79.    for o, ra in opts:  
  80.        a = ra.strip(" \t\n")  
  81.        if o in ("-h", "--help"):  
  82.            print_usage()  
  83.        elif o in ("-n", "--nodesfile"):  
  84.            h = open(a, 'r')  
  85.            hosts = [l.strip(" \t\n") for l in h]  
  86.        elif o in ("-c", "--command"):  
  87.            cmds = [a]  
  88.        elif o in ("-f", "--cmdfile"):  
  89.            cmdfile =  open(a, "r")  
  90.            cmds = [cmd.strip(' \n') for cmd in cmdfile]  
  91.        elif o in ("-v",  "--verbose"):  
  92.            outfile = sys.stdout  
  93.            verbose = True  
  94.        elif o in ("-r", "--recording"):  
  95.            recording = True  
  96.        elif o in ("-l", "--login_name"):  
  97.            username = a  
  98.    if hosts is None:  
  99.        print "using default ./hosts.txt"  
 100.        h = open(os.path.join(os.path.expanduser("."), "hosts.txt"),'r')  
 101.        hosts = [dst.strip(' \n') for dst in h]  
 102.    if cmds is None:  
 103.        print "-c or -f must specified"  
 104.        print_usage()  
 105.    if recording:  
 106.        f_good = open("good_hosts.txt","w")  
 107.        f_bad = open("bad_hosts.txt","w")  
 108.    good_hosts =[]  
 109.    bad_hosts =[]  
 110.    for i in range(len(hosts)):  
 111.        dst = hosts[i]  
 112.        print "%d/%d: ["%(i+1, len(hosts))+ color_str(dst, fg_blue)+"]"  
 113.        do(cmds, dst, username, outfile)  
 114.    print "%d hosts suceed!"%len(good_hosts)  
 115.    outfile.close()  
 116.    h.close()  
 另附一个邮件列表组的讨论内容:
python-cn邮件列表 写道
python 能不能模拟键盘输入字符,类似于TCL的post,比如在我用SSH 连接到LINUX,然后用PYTHON 来输入ls命令。急用
pyexpect
2008/11/25 zhezh80 <zhezh80@...>:
> python能不能模拟键盘输入字符,类似于TCL的post,比如在我用SSH连接到LINUX,然后用PYTHON来输入ls命令。急用
>

你这个并非模拟键盘输入,
而仅仅是远程通过 ssh 执行命令,

请阅以前讨论过的 python-paramiko
 
分享到:
评论

相关推荐

    解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题

    Python – paramiko 模块远程执行ssh 命令 nohup 不生效的问题解决 1、使用 paramiko 模块ssh 登陆到 linux 执行nohup命令不生效 # 执行命令 def command(ssh_config, cmd, result_print=None, nohup=False): ssh ...

    python 实现ssh的执行远端命令和scp的不同机器文件传输功能

    用python 实现ssh的执行远端命令和scp的不同机器文件传输功能。代码简练易懂。

    批量上传文件及执行命令脚本——ssh_batch_trans

    注: 该脚本需要调用的模块为:paramiko, sys, ... 批量执行命令格式: -C "IP列表" -M '执行的命令' 批量传送文件: -S "IP列表" -L "本地文件路径" -R "远程文件路径" 错误日志文件:$PWD/ssh_errors.log

    python执行scp命令拷贝文件及文件夹到远程主机的目录方法

    在给定的例子中,我们看到一个Python脚本`3s.py`,它使用了`subprocess`模块来调用操作系统级别的`scp`命令。`subprocess`模块使得Python程序能够启动新的进程、传递参数以及获取其输出。在这个特定的场景中,`...

    python连接ssh 远程操作linux命令行

    Python SSH库,如Paramiko和ssh模块,是用于在Windows环境下连接到Linux服务器并执行远程命令的强大工具。本文将深入探讨如何使用Python实现这一功能,以及它可以带来的各种可能性。 首先,`Paramiko`是一个实现...

    Python基于SSH协议实现Linux系统远程管理方法研究.pdf

    Paramiko是一个用Python实现的SSHv2协议库,可以用来在Python代码中直接进行SSH操作。它提供了两组核心组件:SSHClient和SFTPClient。SSHClient组件是用于建立SSH连接、执行远程命令的,而SFTPClient组件则提供了一...

    Python脚本后台运行的几种方式

    一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: 代码如下: python test1.py & 现在脚本正常运行,通过ps能看到进程号,此时直接关闭ssh终端...

    自动登陆ssh,批量ip脚本操作

    标题提到的“自动登陆ssh,批量ip脚本操作”是指使用脚本自动化地通过SSH(Secure Shell)协议连接到多个具有不同IP地址的远程服务器。这种方法对于系统管理员来说非常实用,可以减少手动登录每个服务器的时间和工作...

    python交换机自动备份脚本

    为了运行此脚本,你需要确保已经安装了必要的Python库,如paramiko用于SSH连接,pexpect处理交互式CLI会话,或者netmiko,一个跨平台的网络设备配置和管理库。如果不确定如何安装,可以通过Python的包管理器pip来...

    python SSH模块登录,远程机执行shell命令实例解析

    本文将详细介绍如何使用Python中的SSH模块实现远程登录并执行Shell命令。 #### 一、准备工作 在正式开始之前,我们需要确保本地机器已经安装了必要的Python模块。通常涉及到的操作包括: 1. **安装Python开发环境...

    Python实用工具,paramiko模块,Python实现简易版SSH登录工具.pdf

    在这个场景中,我们将学习如何使用paramiko来实现一个简单的命令行版SSH登录工具。该工具允许用户添加、删除服务器连接信息,并能自动输入密码登录远程服务器。 首先,我们需要确保已经安装了Python并将其添加到...

    python常用脚本demo

    ssh_thread.py 是一个批量执行命令的脚本,支持直接执行ssh命令及文件传输,支持多线程 使用说明如下: -h,-H,--help 帮助页面 -C, --cmd 执行命令模式 -M, --command 执行命令模式 -S, --sendfile 传输...

    Python-Devops定时调用http接口定时执行SSH命令的WEB定时任务工具

    本项目名为“Python-Devops定时调用http接口定时执行SSH命令的WEB定时任务工具”,是一个基于Python3开发的解决方案,其核心是利用Flask-APScheduler库来实现定时任务的调度。 Flask是一个轻量级的Python Web框架,...

    paramiko执行命令超时的问题.pdf

    在处理Python中使用paramiko库进行远程命令执行时,经常会遇到因长时间运行命令而导致的超时问题。Paramiko是一个用于进行SSH2远程连接的库,提供了客户端和服务器的功能。使用paramiko可以实现远程执行命令、文件...

    Python-parallelssh非阻塞异步并行SSH客户端库

    Python中的`parallel-ssh`库是一个非常实用的工具,它为开发者提供了非阻塞和异步的并行SSH连接能力,极大地提高了批量管理和自动化运维任务的效率。在Python开发过程中,尤其是在网络编程领域,`parallel-ssh`库是...

    python执行sql脚本工具

    Python执行SQL脚本工具...通过上述方式,你可以使用Python编写一个执行SQL脚本的工具,无论是在本地还是远程服务器上,都能方便地管理MySQL数据库。这个工具对于数据分析师、开发者或者系统管理员来说都是十分有用的。

    实现实时文件同步到远程服务器的Python脚本

    为了自动化地完成这个任务,我们可以编写一个Python脚本来实现文件的实时同步功能。本篇博客将介绍如何使用Python脚本,结合watchdog和paramiko库,实现文件的实时同步。 该脚本的主要功能是: 监测本地指定目录的...

    Python库 | ssh2_python-0.11.0-cp27-cp27m-win_amd64.whl

    在后端开发领域,Python提供了多种库来处理不同的任务,其中`ssh2_python`是一个重要的库,专用于实现Secure Shell (SSH) 协议,用于安全地远程登录和执行命令。本文将深入探讨`ssh2_python`库的功能、安装与使用...

    python ssh模块

    Python SSH 模块是用于在Python程序中实现Secure Shell (SSH)协议的工具,它允许远程服务器进行安全的命令执行、文件传输等操作。在Python中,最常用的SSH库是`paramiko`,正如压缩包中的`paramiko-1.7.7.1`所示,这...

Global site tag (gtag.js) - Google Analytics