2016-10-06 11 views
0

私はPythonには比較的新しいので、pythonスクリプトを使って初めてsftpを試しています。私は私のpythonスクリプトデュアルスタックマシン(IPv4とIPv6の両方)からファイルを取得したい。以下はParamikoのコードスニペットです。SFTP via Paramikoからipv6 Linuxマシン

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を交換する場合でも、次のエラーがスローされます。

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 -2] Name or service not known 

が、私は解決策をチェックし、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を介したファイル転送が必要です。

NOTE:私は、Linuxでsftpコマンドを使用すると、任意の可能な解決策や追加の提案は本当に

答えて

1

ParamikoのTransportクラスがサポートしているが、ソケットオブジェクトを渡していただければ幸いです

IPv4とIPv6の両方のために働きますタプルも含まれます。だから、おそらく具体的にipv6ソケットを渡してみてください?

import socket 

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

こんにちは、これはsock.close()メソッドを呼び出す必要がありますか、それともtransport.close()で自動的に閉じます。 –

+0

['Transport.close()'](https://github.com/paramiko/paramiko/blob/5cc85375ca094b398f20acc9f978b88a6d7a9ef4/paramiko/transport.py#L648)あなたのためにソケットを閉じます。 – csinchok

関連する問題