Python 在将SFTP与Paramiko连接时获取Oops,未处理的类型3(';未实现';)

Python 在将SFTP与Paramiko连接时获取Oops,未处理的类型3(';未实现';),python,python-3.x,paramiko,Python,Python 3.x,Paramiko,我正在尝试让下面的脚本工作,以便从远程服务器(服务器1)读取特定目录中的CSV文件列表,并将数据导入另一台服务器的PostgreSQL数据库 我已经创建了一个rsa SSH密钥并将其复制到远程服务器,现在我可以只使用用户名连接服务器 我已尝试将rsa发布密钥/私钥复制到文件夹(.ssh文件夹在我运行PY脚本时不使用)并给出了它的位置,甚至尝试粘贴整个私钥,但它不起作用,并且引发了以下异常 我在这行“sftp=t.open\u sftp\u client()”中遇到错误,但错误中没有显示有用的信息

我正在尝试让下面的脚本工作,以便从远程服务器(服务器1)读取特定目录中的CSV文件列表,并将数据导入另一台服务器的PostgreSQL数据库

我已经创建了一个rsa SSH密钥并将其复制到远程服务器,现在我可以只使用用户名连接服务器

我已尝试将rsa发布密钥/私钥复制到文件夹(.ssh文件夹在我运行PY脚本时不使用)并给出了它的位置,甚至尝试粘贴整个私钥,但它不起作用,并且引发了以下异常

我在这行“sftp=t.open\u sftp\u client()”中遇到错误,但错误中没有显示有用的信息

谁能帮我一下,建议会很有帮助的

例外情况:

    Database connected
SFTP Connected
Oops, unhandled type 3 ('unimplemented')
Traceback (most recent call last):
  File "/Users/sandeep/Documents/paramiko test.py", line 45, in <module>
    sftp = paramiko.SFTPClient.from_transport(t)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/paramiko/sftp_client.py", line 165, in from_transport
    window_size=window_size, max_packet_size=max_packet_size
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/paramiko/transport.py", line 879, in open_session
    timeout=timeout,
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/paramiko/transport.py", line 1006, in open_channel
    raise e
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/paramiko/transport.py", line 2055, in run
    ptype, m = self.packetizer.read_message()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/paramiko/packet.py", line 459, in read_message
    header = self.read_all(self.__block_size_in, check_rekey=True)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/paramiko/packet.py", line 303, in read_all
    raise EOFError()
EOFError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/sandeep/Documents/paramiko test.py", line 50, in <module>
    self._logger.error(msg)
import paramiko
import psycopg2
import psycopg2.extras
import os
import inspect
import re
import sys

SECTION_SRC_STAR = "DEFAULT"

SSH_HOST = '*****.com'
SSH_USERNAME = 'root'
#SSH_KEYFILE = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile(inspect.currentframe()))[0], "ssh.key")))
#SSH_KEYFILE = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile(inspect.currentframe()))[0], "id_rsa")))
SSH_KEYFILE ="/Users/sand/Documents/ssh_pub"

SSH_DIR = '/opt/prod_odoo_out/carrierfiles/dhl/'
SSH_PORT = 22
SSH_MASK = 'file_pattern.*\.csv'

DSN = "dbname='postgres' user='postgres' host='localhost' password='postgres' port='5432'"
TABLE_NAME = 'staging.dhl_tracking_details'


conn = psycopg2.connect(DSN)
print("Database connected")
conn.set_client_encoding('latin-1')
cur = conn.cursor()

ssh = paramiko.SSHClient()
t = paramiko.Transport((SSH_HOST, SSH_PORT))


#key = paramiko.RSAKey.from_private_key_file(SSH_KEYFILE)
#key='***************...........'
#t.connect(username=SSH_USERNAME, pkey=key)
t.connect(username=SSH_USERNAME)
print("SFTP Connected")
try:
    #sftp = paramiko.SFTPClient.from_transport(t) 
    sftp = t.open_sftp_client()
    print("SFTP Client : Open")
except Exception as e:
    msg = "Error connecting via ssh: %s" % e
    self._logger.error(msg)
    raise paramiko.SSHException(msg)


for filename in sftp.listdir(SSH_DIR):
    if re.match(SSH_MASK, filename):
        path = '/%s/%s' % (SSH_DIR, filename)
        fobj = sftp.file(path, 'rb')
        #cur.execute('TRUNCATE TABLE %s' % TABLE_NAME)
        #fobj2 = RowsIO(fobj)
        #cur.copy_expert("COPY %s FROM STDOUT WITH DELIMITER ';' NULL 'null' CSV HEADER" % (TABLE_NAME, ), fobj2)
        sql = "COPY %s FROM STDIN WITH DELIMITER AS ';'  csv header"
        table = 'staging.dhl_tracking_details'
        cur.copy_expert(sql=sql % table, file=fobj)
        conn.commit()
        sftp.remove(path)

t.close()

我已经提到了带有Pkey属性的RSA密钥,这个问题得到了解决

pk=paramiko.RSAKey.from_private_key(open('/Users/sandeep/Documents/ssh_pub/id_rsa'))
t.connect(username=SSH_USERNAME,pkey=pk)

猜测一下:这可能与
paramiko
无关,但与您的服务器软件有关。@Thomas服务器软件在这个意义上是什么?我能够通过终端连接服务器,使用脚本它得到了以下错误,关于如何解决它的任何建议?我的猜测是不对的,根据其他类似的帖子,这似乎是一个
paramiko
问题。您是否确切知道哪一行导致异常?如果它在
raise paramiko.SSHException(msg)
@Thomas sftp=t上失败,我希望看到回溯。open\u sftp\u client()这行抛出了错误。@Thomas我写过这样的错误处理,但除了我上面提到的错误之外,什么都没有出现。例外情况除外,如e:msg=“通过ssh连接时出错:%s”%e self.\u logger.Error(msg)引发paramiko.SSHException(msg)