Я написал класс, чтобы упростить подключение S SH, но происходили странные вещи:
# ssh_connect.py
# coding=utf-8
import paramiko
class SSH_Client(object):
def __init__(self, hostname, port, username, password):
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(
hostname=HOSTNAME,
port=PORT,
username=USERNAME,
password=PASSWORD
)
self.sftp = None
self.trans = None
def run_command(self, command):
if not command:
raise ValueError("no command")
stdin, stdout, stderr = self.ssh.exec_command(command)
return stdout.read().decode()
def get_current_files(self, path=None):
command = ''
if path:
command += 'cd {};'.format(path)
command += "ls -1 |awk '{print i$0}' i=`pwd`'/'"
stdin, stdout, stderr = self.ssh.exec_command(command)
return stdout.read().decode().split('\n')[:-1]
def sftp_connect(self):
self.trans = paramiko.Transport(
sock=(HOSTNAME, PORT)
)
self.trans.connect(
username="root",
password="shhg1858Down"
)
self.sftp = paramiko.SFTPClient.from_transport(self.trans)
def download_file(self, full_name):
if not self.sftp:
self.sftp_connect()
local_name = './file/' + full_name.split('/')[-1]
self.sftp.get(full_name, local_name)
return local_name
def __del__(self):
if self.sftp:
self.sftp.close()
if self.trans:
self.trans.close()
self.ssh.close()
SSHCLient = SSH_Client("1.1.1.1", 111, 'user', "password")
if __name__ == '__main__':
print(SSHCLient.get_current_files())
# do_something.py
# coding=utf-8
from ssh_connect import SSHCLient
import datetime
if __name__ == '__main__':
print(SSHCLient.get_current_files())
ssh_connect.py работает хорошо, но когда я пытался импортировать экземпляр SSH_Client (SSHCLient) в do_sometion.py, соединение s sh не будет успешным, и программа зависнет.
Я сделал то же самое, используя cx_ oracle, и все прошло хорошо, Не знаю, о чем это.