首页 > 解决方案 > 使用 Paramiko 连接到 SFTP 服务器失败并显示“需要整数(获取类型 str)”

问题描述

我正在尝试运行以下代码:

#!/data/go_dl/resources/miniconda3/envs/stg01.nifi_Env/bin/python
import sys
import paramiko
import socket

sftpHost = 'eng-test-host'
sftpPort = '22'
sftpUser = 'user_1'
sftpPass = '123456'
sftpPathSource = '/tmp/poc/'
localPath = '/data/poc/'
sftpIMGFiles = 'test.IMG'


transport=paramiko.Transport((sftpHost, sftpPort))
transport.connect(username=sftpUser, password=sftpPass)
sftp=paramiko.SFTPClient.from_transport(transport)

sftp.put(sftpPathSource + sftpIMGFiles +  localPath + sftpIMGFiles)
sftp.close()
transport.close()

class FastTransport(paramiko.Transport):
    def __init__(self, sock):
        super(FastTransport, self).__init__(sock)

但我收到了这个错误:

Traceback (most recent call last):
  File "gettingTtsFile.py", line 18, in <module>
    transport=paramiko.Transport((sftpHost, sftpPort))
  File "/data/go_dl/resources/miniconda3/lib/python3.8/site-packages/paramiko/transport.py", line 409, in __init__
    retry_on_signal(lambda: sock.connect((hostname, port)))
  File "/data/go_dl/resources/miniconda3/lib/python3.8/site-packages/paramiko/util.py", line 283, in retry_on_signal
    return function()
  File "/data/go_dl/resources/miniconda3/lib/python3.8/site-packages/paramiko/transport.py", line 409, in <lambda>
    retry_on_signal(lambda: sock.connect((hostname, port)))
TypeError: an integer is required (got type str)

有人能帮我吗?我尝试运行的 Python 版本是 3.8.5,Paramiko 是 2.7.2。

谢谢

标签: pythonsshsftpparamiko

解决方案


中的port数字 argparamiko.Transport必须是 anint而不是str

sftpHost = 'eng-test-host'
sftpPort = 22 # Note this is int and not str

transport=paramiko.Transport((sftpHost, sftpPort))

推荐阅读