61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
# _*_ coding: utf-8 _*_
|
|
# @Time :2022/12/26 16:33
|
|
# @Email :508737091@qq.com
|
|
# @Author :qiangyanwen
|
|
# @File :ssh_client.py
|
|
import paramiko
|
|
|
|
|
|
class SSHConnection(object):
|
|
def __init__(self, host, port, username, password):
|
|
self._host = host
|
|
self._port = port
|
|
self._username = username
|
|
self._password = password
|
|
self._transport = None
|
|
self._sftp = None
|
|
self._client = None
|
|
|
|
def __enter__(self):
|
|
print("客户端开始创建连接.....")
|
|
transport = paramiko.Transport((self._host, self._port))
|
|
transport.connect(username=self._username, password=self._password)
|
|
self._transport = transport
|
|
return self
|
|
|
|
def download(self, remote_path, local_path):
|
|
if self._sftp is None:
|
|
self._sftp = paramiko.SFTPClient.from_transport(self._transport)
|
|
self._sftp.get(remote_path, local_path)
|
|
|
|
def put(self, local_path, remote_path):
|
|
if self._sftp is None:
|
|
self._sftp = paramiko.SFTPClient.from_transport(self._transport)
|
|
self._sftp.put(local_path, remote_path)
|
|
|
|
def command(self, command):
|
|
if self._client is None:
|
|
self._client = paramiko.SSHClient()
|
|
self._client._transport = self._transport
|
|
stdin, stdout, stderr = self._client.exec_command(command)
|
|
out_data = stdout.read().decode('utf-8').strip()
|
|
code = stdout.channel.recv_exit_status()
|
|
if len(out_data) > 0:
|
|
return out_data
|
|
err_data = stderr.read().decode('utf-8').strip()
|
|
if len(err_data) > 0:
|
|
return err_data
|
|
return code
|
|
|
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
if self._transport:
|
|
self._transport.close()
|
|
if self._client:
|
|
self._client.close()
|
|
print("客户端关闭已成功.....")
|
|
|
|
|
|
with SSHConnection("47.96.135.132", 22, "root", "Qyw1994@520") as ssh:
|
|
ls = ssh.command("ls -l")
|
|
print(ls)
|