通过Paramiko到ipv6 linux machin的SFTP

2024-05-15 17:10:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python比较陌生,我第一次通过python脚本尝试sftp。我希望我的python脚本从一个双堆栈机器(同时存在IPv4和IPv6)获取一个文件。下面是我为Paramiko使用的代码片段:

host = ip #ip is a string that has the value of IP
port = 22
transport = paramiko.Transport((host, port))
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport

当我在IPv4中使用代码时,它可以正常工作。但是当我用IPv6地址替换ip时,会抛出以下错误:

^{pr2}$

我检查了一个解决方案,发现有人建议将接口与IP一起添加,但在尝试相同的操作时,我遇到了以下错误:

Traceback (most recent call last):
File "MyFile.py", line 92, in <module>
putFile()
File "MyFile.py", line 29, in analyzeLogs
transport = paramiko.Transport((host, port))
File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 289, in __init__
sock.connect((hostname, port))
File "<string>", line 1, in connect
socket.gaierror: [Errno -9] Address family for hostname not supported

我的原始服务器将不是一个双堆栈机器,因此我需要通过IPv6文件传输。在

注意:当我在linux中使用sftp命令时,它同时适用于ipv4和ipv6

如有任何可能的解决方案或其他建议,我们将不胜感激


Tags: inpyip脚本机器hostparamiko堆栈
1条回答
网友
1楼 · 发布于 2024-05-15 17:10:03

Paramiko的Transport类支持传入套接字对象和元组。那么也许可以尝试专门传入一个ipv6套接字?在

import socket

sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
sock.connect((hostname, port))
transport = paramiko.Transport(sock)

相关问题 更多 >