Python-15-ssh_cmd

Python-15-ssh_cmd,第1张

import paramiko

import sys

import getpass

import threading

import os

def pcmd(host,port=22,user='root',passwd=None,cmd=None):

    ssh = paramikoSSHClient()

    sshset_missing_host_key_policy(paramikoAutoAddPolicy())

    sshconnect(host,port=port,username=user,password=passwd)

    stdin,stdout,stderr = sshexec_command(cmd)

    out = stdoutread()

    err = stderrread()

    if out:

        print(f'[{host}] OUT:\n {outdecode()}')

    if err:

        print(f'[{host}] ERR:\n {errdecode()}')

if __name__ == '__main__':

    #pcmd('127001',passwd='123456',cmd='id root;ls /root')

    if len(sysargv) < 3: # 命令加参数长度不能小于3

        print(f'usage: {sysargv[0]} ipfile commands')

        exit(1)

    if not ospathisfile(sysargv[1]): # ip地址文件必须存在

        print(f'no such file:{sysargv[1]}')

        exit(2)

    ipfile = sysargv[1]

    cmd = ' 'join(sysargv[2:]) #拼接命令

    passwd = getpassgetpass()

    with open(ipfile) as fobj:

        for line in fobj:

            ip = linestrip()#去除行尾\n

            pcmd(ip,22,'root',passwd,cmd)

            t = threadingThread(target=pcmd,args=(ip,22,'root',passwd,cmd))

            tstart()

编辑“/usr/local/python269/lib/python26/site-packages/pexpect/__init__py

”,将“ raise EOF(str(err) + '\n' + str(self))”这段代码注释掉,程序正常运行

有些 UNIX 平台,当你读取一个处于 EOF 状态的文件描述符时,会抛出异常,注释掉就可以了

局域网内有一百多台电脑,全部都是linux *** 作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的。现在有个任务是在这些电脑上执行某些命令,者说进行某些 *** 作,比如安装某些软件,拷贝某些文件,批量关机等。如果一台一台得手工去 *** 作,费时又费力,如果要进行多个 *** 作就更麻烦啦。

或许你会想到网络同传, 网络同传是什么?就是在一台电脑上把电脑装好,配置好,然后利用某些软件,如“联想网络同传”把系统原样拷贝过去,在装系统时很有用,只要在一台电脑上装好,同传以后所有的电脑都装好 *** 作系统了,很方便。同传要求所有电脑硬件完全相同,在联想的电脑上装的系统传到方正电脑上肯定会出问题的。传系统也是很费时间的,根据硬盘大小,如果30G硬盘,100多台电脑大约要传2个多小时,反正比一台一台地安装快!但是如果系统都传完了,发现忘了装一个软件,或者还需要做些小修改,再同传一次可以,但是太慢,传两次半天时间就没了。这时候我们可以利用ssh去控制每台电脑去执行某些命令。

先让我们回忆一下ssh远程登录的过程:首先执行命令 ssh username@1921681x ,第一次登录的时候系统会提示我们是否要继续连接,我们要输入“yes”,然后等一段时间后系统提示我们输入密码,正确地输入密码之后我们就能登录到远程计算机,然后我们就能执行命令了。我们注意到这里面有两次人机交互,一次是输入‘yes’,另一次是输入密码。就是因为有两次交互我们不能简单的用某些命令去完成我们的任务。我们可以考虑把人机交互变成自动交互,python的pexpect模块可以帮我们实现自动交互。

我也遇到了这个问题,发现如下url可能很有帮助:

模拟SSH登陆一台机器并打印磁盘情况,然后退出的例子:

#!/usr/local/python34/bin/python34

import pexpect

ip="1921684622"

name="root"

pwd="abc"

#发送命令执行交互

child=pexpectspawn('ssh %s@%s' % ("root",ip) )

#

childexpect ('password:')

childsendline(pwd)

childexpect('$')

childsendline('df -h')

#发送命令

childsendline("exit")

childinteract()

#关闭pexpect

childclose()

以上就是关于Python-15-ssh_cmd全部的内容,包括:Python-15-ssh_cmd、python脚本ssh命令行可以登录并执行相应命令,但是脚本总是报错,何解、python用ssh连接时,只用ip和用户名但是不需要用到密码,该怎么编程谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10178427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存