【问题标题】:Send a file to a specific path in a server将文件发送到服务器中的特定路径
【发布时间】: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(需要密钥生成器)一旦完成这一步,我就可以选择一个服务器并双击它进入命令行界面,无需任何登录。那么我应该在代码中写什么登录信息呢??

标签: python file transfer


【解决方案1】:

使用这个

sftp.Connection(host="your_host", port="your_port", username="user_name", private_key="private_key")

如果您仍然遇到问题,请将 private_key 更改为 password

查看文档

http://pysftp.readthedocs.org/en/release_0.2.8/pysftp.html

【讨论】:

  • 嗨 danidee,我已经设法通过从我们公司网站获取服务器登录信息来解决问题。我没有使用端口。我现在遇到的问题是一组服务器的登录信息与其他服务器不同。因此,如果登录失败,我需要编写一个条件,然后尝试另一个登录信息。我还不知道怎么做,如果你能给我一个提示,那就太好了非常感谢你的文档,我一定会在其他项目中使用它。
  • 您好,我已经设法解决了服务器具有不同登录信息的问题。我使用了 2 个不同的列表,每个列表都有与其对应的登录信息(用户名/密码)和 2 个 for 循环。我希望做一个更智能的代码,我只需要创建一个列表,其中包含具有 2 个不同登录信息的服务器,可能使用一个 while 循环。但不幸的是,我没有成功,但现在我对我当前的笨拙代码感到满意 :) 当我有足够的时间时,我会尝试改进它。谢谢!
  • 您可以使用字典并让您的脚本向用户询问他想要连接的服务器,例如servers = {'server1': ['username1', 'password1'], 'server2': ['username2', 'password2']},然后您可以轻松地做到servers.get('server1', 'Sorry that server doesn't exist')。如果用户指定 server1 应该返回包含 server1 的连接详细信息的列表,或者如果未找到则返回错误消息....用户我的意思是你:)
猜你喜欢
  • 2011-09-16
  • 2013-08-08
  • 2015-02-26
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2021-11-20
相关资源
最近更新 更多