连接虚拟机上传本地文件 打包Linux的文件 下载的本地

@TOC加粗样式
请使用python连接你的虚拟机,完成以下操作(定义到类和函数中):

  1. 在当前python项目目录下创建work目录,并在其中创建同名文本文档work.txt,在txt文件中写入
    当前日期的月和日即可
  2. 连接虚拟机,将刚才写好的work.txt上传到虚拟机/home/目录下,同时将本地的work.txt删除。
  3. 将Linux上etc目录下的passwd,shadow,group三个文件使用tar命令进行打包,包名为work.txt中
    的内容加上文件的首字母,例如:0725p.tar.gz,0725s.tar.gz,0725g.tar.gz,将压缩后的三个
    文件下载到本地work目录

import os
import datetime
import paramiko
import shutil
class Work(object):

def __init__(self,ip, port, user, password, bendipath, linuxpath):
    self.ip = ip  
    self.port = port  # 端口号
    self.user = user  # 用户名
    self.password = password  # 密码
    self.bendipath = bendipath  # 本地路径
    self.linuxpath = linuxpath  # Linux路径
# 第一问
def mk_dir(self):
    if os.path.exists(self.bendipath):
        shutil.rmtree(self.bendipath)
        self.mk_dir()
    else:
        os.mkdir('work')
        os.chdir('work')
        with open('work.txt', 'w+') as f :
            t = str(datetime.datetime.now())
            f.write(t[5:7]+t[8:10])
# 第二问
def put_txt(self):
    p = self.sftp_connect()
    if os.path.exists(self.bendipath):
        filename = os.listdir(self.bendipath)
        if len(filename) == 0:
            print('no')
        else:
            fn = ''.join(filename)
            p.put(os.path.join(self.bendipath, fn), f'{self.linuxpath}{fn}')
            os.remove(os.path.join(self.bendipath, fn))
            print('删除成功')
    else:
        print('没有该目录')
# 第三问
def three(self):
    p = self.sftp_connect()
    s = self.ssh_connect()
    a, b, c = s.exec_command(f'cat {self.linuxpath}work.txt')
    time = b.read().decode('utf-8')
    list1 = ['passwd', 'shadow', 'group']
    for i in list1:
        s.exec_command(f'tar -zcvf {self.linuxpath}{time}{i[0]}.tar.gz /etc/{i}')
    a, b, c = s.exec_command(f'ls {self.linuxpath}')
    filename = b.read().decode('utf-8').replace('\n', ',')
    print(filename)
    filename = filename[:38]
    filename = filename.split(',')
    for i in filename:
        p.get(self.linuxpath+i, os.path.join(self.bendipath, i))
        print(f'{i}压缩包已下载')
    # print(filename)

# python连接Linux执行命令
def ssh_connect(self):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(self.ip, self.port, self.user, self.password)
    return ssh
    
# python连接Linux上传下载文件
def sftp_connect(self):
    s = paramiko.Transport(self.ip, self.port)
    s.connect(username=self.user, password=self.password)
    p = paramiko.SFTPClient.from_transport(s)
    return p

w = Work(‘192.168.56.1’, 22, ‘root’, ‘123456’, r’D:\测试\Mycode\work’, ‘/home/’)
w.mk_dir()
w.put_txt()
w.three()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值