无法使用 Python ftplib 连接到服务器,但 PuTTY Plink 可以工作

Cannot connect to server with Python ftplib, but PuTTY Plink works

抱歉,如果这听起来太基础,或者如果我在搜索过程中没有找到重复项:

例如,这些没有帮助:

并且 ftplib 或其他教程中的示例对我不起作用,文档与其说是有用,不如说是令人困惑。 我一定是做错了什么基本错误,或者我的网络配置有特殊设置可能会阻止 ftplib 正常工作?我的配置。 PythonWin10 上的 3.6.3。

我的问题:下面的代码有什么问题?

import ftplib

host = '0.0.0.0'
user = 'user'
passwd = 'XXXX'

with ftplib.FTP(host=host, user=user, passwd=passwd) as ftp:
    print(ftp.dir())
    

一段时间后,我收到错误消息:

TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond


使用 plink 的不同方法:

但是,以下使用 plink 在命令行中对我来说效果很好。 因此,主机、用户或密码或连接似乎没有任何问题。

plink -ssh -batch user@0.0.0.0 -pw XXXX "cd SubDir/SubSubDir/; ls"

但我认为 ftplib 与其乱用 plinksubprocess,不如说更方便。谢谢指点。

也许可以尝试不同的方法,首先确保您通过 ping 连接到目标 IP,然后尝试使用 ftplib 登录。这是一个例子,让我知道这是否是你的方向:

import ftplib
from ftplib import FTP , error_perm
import subprocess
import time

def ping_to_target (ip):
    print(f"Ping ---> {ip}")
    process = subprocess.Popen("ping " + ip + " -n 10 " , shell=True , stdout=subprocess.PIPE)
    time.sleep(0.5)
    for line in process.stdout:
        if b"Destination" in line or b"Request timed out" in line or b"failure" in line:
            return False
    print(f"ping ---> {ip} done")
    return True

def some_func(host , username , password):
    if not ping_to_target(host):
        return False
    # CONNECT TO TARGET
    ftp = FTP (host)
    ftp.login(username , password)
    ftp.getwelcome()

我希望这就是你问题的意思

Plink 是一个 SSH 客户端。 SSH 与 FTP 无关。您可能想使用 SFTP 连接,这是一个运行在 SSH 之上的完全不同的协议。

对于 Python 中的 SFTP,请使用 Paramiko 或 pysftp。