文章内容

2023/11/22 5:56:43,作 者: 黄兵

TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有响应

最近在使用 paramiko 连接远程服务器的时候,出现了如下错误:

TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有响应

上面的错误看起来是由于连接方没有正确答复或连接的主机没有响应而引起的超时错误。在Windows系统上,可能需要考虑一些特定的设置。

首先,尝试增加连接的超时时间,你可以在ssh.connect()中设置timeout参数的值,单位是秒。例如,将超时时间设置为30秒:

ssh.connect(pkey=private_key, hostname=host, port=port, username=username, timeout=30)

如果问题仍然存在,可以考虑以下几点:

  1. 防火墙设置: 确保服务器的防火墙允许SSH连接。如果有本地防火墙,也确保允许你的应用程序通过。

  2. 网络连接: 确保你的计算机可以正常访问目标服务器。尝试使用其他工具(如ping)测试与服务器的连接。

  3. 主机名和端口号: 确保你的主机名和端口号设置正确,你也可以尝试使用IP地址而不是主机名。

  4. SSH服务器配置: 确保目标服务器上的SSH服务器正在运行,并且配置正确。

在处理超时错误时,你还可以添加一些重试机制,以便在发生超时时进行多次尝试。这可以通过在捕获超时异常的except块中添加重试逻辑来实现。

import time

# ...

def upload_images_to_server(self, host, username, private_key_file_path, local_file_name, remote_file_path,
                            port=22, max_retries=3, retry_delay=5):
    for retry in range(max_retries):
        try:
            # ... (原有代码)

            ssh.connect(pkey=private_key, hostname=host, port=port, username=username, timeout=30)
            
            # ... (原有代码)

            break  # 如果成功,退出循环
        except socket.timeout as e:
            print(f"连接超时,正在进行第 {retry + 1}/{max_retries} 次重试.")
            time.sleep(retry_delay)
        except Exception as e:
            print(f"发生其他异常: {e}")
            # 处理其他异常,例如记录日志或者抛出异常

这样,如果连接超时,它将尝试进行多次重试,每次之间有一个5秒的延迟。你可以根据需要调整max_retriesretry_delay的值。


其他相关推荐:

1、Python paramiko 判断服务器是否存在相关目录

2、Python paramiko 使用总结

3、ERROR: Failed building wheel for pycrypto

4、Python 中的 *args, **kwargs 参数理解

5、Python 静态方法与实例方法

分享到:

发表评论

评论列表