Fabric¶
版本
- Fabric1:旧版本,只支持Python2
- Fabric2:官方版本同时支持Python2和3
- Fabric3:非官方支持Python2和3版本
import paramiko
import os
class RunShell():
def __init__(self):
self.__host = "xxx.xxx.xx.xx"
self.__port = 22
self.__username = "root"
self.__password = "xxxx"
# 基于用户名和密码的sshclient方式登陆
def ssh(self, cmd):
ssh = paramiko.SSHClient()
# 允许连接不在know_host文件中的主机,此方法必须放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 建立连接
ssh.connect(hostname=self.__host, port=self.__port, username=self.__username, password=self.__password)
# 使用这个连接执行命令,结果放到stdout中,如果有错误将放到stderr中
stdin, stdout, stderr = ssh.exec_command(cmd)
result = stdout.read().decode("utf-8")
# 关闭连接
ssh.close()
return result
# 上传或下载文件
def sftp(self, up_or_down, localpath, remotepath):
# 实例化一个trans对象
trans = paramiko.Transport((self.__host, self.__port))
# 建立连接
trans.connect(username=self.__username, password=self.__password)
# 实例化一个sftp对象,指定连接的通道
sftp = paramiko.SFTPClient.from_transport(trans)
result = "未执行"
if up_or_down == "up":
if not os.path.exists(localpath):
result = "未找到要上传的文件"
else:
# 上传文件
sftp.put(localpath=localpath, remotepath=remotepath)
self.ssh("systemctl reload nginx")
result = "上传成功,并已重启服务器"
elif up_or_down == "down":
if remotepath == "":
result = "没有找到服务器中相应的路径"
else:
# 下载文件
sftp.get(remotepath=remotepath, localpath=localpath)
result = "下载成功"
else:
result = "不知道该上传还是下载"
trans.close()
return result
最后更新:
2021-11-26