python中的paramiko 连接linux服务器 控制多台服务器 创建交互环境 Sftp文件上传下载 (代码实现)

paramiko

第三方包 基于ssh服务 可以使用python实现ssh功能


使用前先安装

pip install paramiko

一、使用python连接linux服务器并执行linux命令

1.导包import paramiko
2.创建一个客户端
3.创建一个白名单(本地创建一个白名单)
4.设置不提醒(把白名单加到客户端)
5.连接服务器
6.执行linux命令
7.查看输出结果
8.关闭连接

import paramiko

# 创建一个客户端
ssh = paramiko.SSHClient()
# 创建一个白名单
know_host = paramiko.AutoAddPolicy()
# 设置不提醒
ssh.set_missing_host_key_policy(know_host)
# 连接服务器
ssh.connect(hostname = '10.10.107.84',port=22,username='root',password='123456')
# 执行linux命令
stdin, stdout, stderr = ssh.exec_command('mkdir /home/zhy/Desktop/g')
# stdin 标准输入     文件对象 写权限
# stout 标准的输出   文件对象 读权限
# stderr 特殊的输出  文件独享 读权限
# 查看输出结果,输出结果是一个对象,文件对象可以用read()读出来,传出来是二进制对象,用decode解码
print(stdout.read().decode())
# 关闭连接
ssh.close()

二、控制多台服务器(用多线程)

import threading
import paramiko

class MyThread(threading.Thread):
    def __init__(self,host,user,pwd,port=22):
        self.host=host
        self.user=user
        self.pwd=pwd
        self.port=port
        super(MyThread, self).__init__()

    def run(self):
        # 创建客户端
        ssh = paramiko.SSHClient()
        # 设置白名单不提醒
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)

        # 连接
        ssh.connect(hostname=self.host,port=self.port,username=self.user,password=self.pwd)

        # 执行命令
        stdin,stdout,stderr=ssh.exec_command('mkdir /opt/love')
        print(stdout.read().decode())

        # 关闭连接
        ssh.close()

if __name__ == '__main__':
    data = [
        {'host':'ip1','user':'root','password':'root123'},
        {'host': 'ip2', 'user': 'root', 'password': '123456'},
        {'host': 'ip3', 'user': 'root', 'password': '123456'},
        {'host': 'ip4', 'user': 'root', 'password': '123456'},
    ]
    tlist = []
    for i in data:
        t = MyThread(host=i['host'],user=i['user'],pwd=i['password'])
        tlist.append(t)  #实例化对象并传参

    for i in tlist:
        i.start()

三、 创建交互环境

import paramiko

# 创建客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接
ssh.connect(hostname='10.10.107.84',port=22,username='root',password='123456')

# 创建一个shell
shell = ssh.invoke_shell()
shell.settimeout(1)
# 获取命令
command = input('>>') + '\n'
# 发送命令
shell.send(command)

while True:
    if command == 'q' + '\n':
        break
    try:
        # 获取返回的结果
        recv = shell.recv(512).decode()
        if recv:
            print(recv)
        else:
           continue
    except:
        command = input('>>') + '\n'
        # 发送命令
        shell.send(command)



ssh.close()

四、Sftp文件上传下载

import paramiko

trans = paramiko.Transport(sock=('10.10.107.84'))

trans.connect(username='root',password='123456')

sftp = paramiko.SFTPClient.from_transport(trans)

# put('你要上传的文件','上传的位置')
# sftp.put('jiandandian','/opt/newjdd')
# get('你要下载的文件','下载的位置')
sftp.get('/opt/newjdd','love')

sftp.close()

你可能感兴趣的:(Linux)