收藏文章 楼主

python 与linux交互 paramiko 自动化运维 批量登录控制多台主机执行命令

版块:python3 脚本程序   类型:普通   作者:小绿叶技术博客   查看:2337   回复:2   获赞:0   时间:2020-10-06 16:40:22

# 首先需要配置 python的 pip 的源 参考 linux centos7 编译安装python3 --shell脚本

#!/usr/bin/python3

import paramiko

client = paramiko.SSHClient()    #创建连接对象

client.set_missing_host_key_policy(paramiko.AutoAddPolicy) 

#设置自动添加主机名及主机密钥到本地HostKeys对 象,不依赖load_system_host_key的配置。跳过yes 连接确认提示

try:

    client.connect(hostname='eisc.cn',port=22,username='root',password='eisc.cn') #connetc为连接 函数

    print('主机连接成功!')

except:

    print('主机连接失败,请确认输入信息!')

stdin,stdout,stderr = client.exec_command(

'''

ip a; echo "我是来自python控制系统的进程在操批量操作其它主机;查看ip信息: " 


echo "需要集成文件修改板块函数"

ls -al ; pwd

'''

#stdout为指令正确信息,stderr为指令异常信息


print(stdout.read().decode('utf-8'))   

print(stderr.read().decode('utf-8'))





#####################################################

#!/usr/bin/python3

import paramiko   

def SSHLinux(ip,port,username,password,num):       # 程序SSH连接函数,也是本程序核心方法

    a=[]                                                                                # 定义变量a 为一个列表变量

    b=[]

    c=[]

    d=[]

    for i in range(num):                                                # 变量 i 是次数, range() [reɪndʒ] 范围 函数;可创建一个整数列表;如 range(5)  等于 range(0,5) 生成0到5的自然数

        a.append('client' + str(i))                             # append [əˈpɛnd] 附加 , 在列表里附加元素; str() 函数将对象转化字符串。等同于循环储存字符串到列表变量a; 

        b.append('stdin' + str(i))

        c.append('stdout' + str(i))

        d.append('stderr' + str(i))

        a[i] = paramiko.SSHClient()                             # 创建num个连接对象

                                                                                # client2 = paramiko.SSHClient()

        a[i].set_missing_host_key_policy(paramiko.AutoAddPolicy)  

                                                                                # 添加num个主机名及主机密钥到本地HostKeys对象

                                                                                # client2.set_missing_host_key_policy(paramiko.AutoAddPolicy)

        try:

            a[i].connect(hostname=ip[i],port=port[i],username=username[i],password=password[i]) #num个连接

                                                                                # client2.connect(hostname=ip[1],port=port[1],username=username[1],password=password[1])

            print(f'主机{ip[i]}连接成功!')

        except:

            print(f'主机{ip[i]}连接失败,请确认输入信息!')

            exit()

    while True: # while True 条件为真 一直进行loop(死循环)

# while true 循环中会加入break条件判断用以在循环内部的某个条件达成时终止循环

        e = (

'''

ls 

echo "两条命令,"

'''

        for i in range(num):

            b[i],c[i],d[i] = a[i].exec_command(e)       #num个对象执行e命令

                                                                                # b[1],c[1],d[1] = a[1].exec_command(e)

                                                                                # stdin1,stdout1,stderr1 = client2.exec_command(e)

            print(f'----------------------{ip[i]}信息----------------------')

            print(c[i].read().decode('utf-8'))                  # 打印正确输出

            print(d[i].read().decode('utf-8'))                  # 打印错误输出

                                                                                # print(f'----------------------{ip[1]}信息----------------------')

                                                                                # print(c[1].read().decode('utf-8'))

                                                                                # print(c[1].read().decode('utf-8'))

        if (i < num): # 要求循环次数 小于ip个数

            a[i].close()

            # a[1].close()

            print('已退出SSH连接')

            break # while true 的条件终止循环语句

def main():                                                             #主方法(运行函数),可以把批量ip端口账号密码对应的写入列表,然后把输入删掉运行

    ip=['hc3.ssh.gs','hc4.ssh.gs']

    port=[22,22]

    username=['root','root']

    password = ['eisc','eisc']

    num = len(ip)

    SSHLinux(ip,port,username,password,num)

if __name__ == '__main__':                                                                              # 程序运行入口

    main()


提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:python 与linux交互 paramiko 自动化运维 批量登录控制多台主机执行命令

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息