@TOC加粗样式
请使用python连接你的虚拟机,完成以下操作(定义到类和函数中):
- 在当前python项目目录下创建work目录,并在其中创建同名文本文档work.txt,在txt文件中写入
当前日期的月和日即可 - 连接虚拟机,将刚才写好的work.txt上传到虚拟机/home/目录下,同时将本地的work.txt删除。
- 将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()