【发布时间】:2016-04-21 23:33:02
【问题描述】:
我正在尝试使用一个脚本将文件从我的 PC 发送到多个服务器到服务器目录中的特定文件夹,为了简单起见,我一开始尝试将一个文件发送到一台服务器而不是多个服务器。
我已经使用密钥连接到服务器进行身份验证,因此我不需要在我的代码中使用任何登录信息。我使用了以下内容:
import pysftp as sftp
def Filetransfer():
try:
s = sftp.Connection(host='IP address')# this is where the server ip address is inserted
remotepath='/xx/yy/file.txt'# where my file will be transferred to
localpath='C:/Users/David/Desktop/file.txt'# this is the file location in my PC
s.put(localpath,remotepath)
s.close()
except Exception, e:
print str(e)
Filetransfer()
我得到以下异常:
AttributeError: "'Connection' object has no attribute '_transport_live'" in <bound method Connection.__del__ of <pysftp.Connection object at 0x0000000002E1F3C8>>
我尝试在 IP 地址旁边插入服务器端口,但没有帮助,因为我得到了同样的错误。
【问题讨论】:
-
您确定使用正确的密码并通过开放端口连接吗?
-
hej danidee,我已使用 Pulse Secure SW 连接到服务器。 Se this pulsesecure.net 并通过输入我的用户名和密钥生成器来完成登录。我可以导航到服务器并使用 SecureFX 工具连接到每个服务器。因此,我需要的不是手动将文件从我的 PC 拖到服务器中的特定文件夹,而是自动执行。我不认为这应该是我上面的代码的问题,但我不明白为什么会出现此错误:(
-
即使您是从另一个程序登录到服务器的。您的 python 脚本无法知道您已登录。因此您还需要在脚本中使用登录信息
-
嗨 danidee,我明白你的意思,但问题是当我通过 SecureFX 工具连接到服务器时,我无需输入用户名和密码即可立即连接,因为用户名和密码(密钥生成器密码)仅使用 pulsesecure 工具插入一次,之后无需从服务器登录信息即可连接,只需在 SecureFX 的数据库中双击服务器名称即可。密码是密钥生成的,不需要从服务器而是从 PulseSecure 软件。我希望我没有让您感到困惑。感谢您的帮助。
-
我取得了一些进展,我设置了错误的端口。现在上面的行更改为 s = sftp.Connection('IP address','port number') ,当我运行它时,我没有收到错误消息,而是一条消息:您尚未指定密码或密钥。所以这是我的问题,我无法在上面的行中设置用户名和密码,因为正如我所说的服务器不需要登录信息,它来自 SecureFX(需要密钥生成器)一旦完成这一步,我就可以选择一个服务器并双击它进入命令行界面,无需任何登录。那么我应该在代码中写什么登录信息呢??