标签: pysftp

使用 pysftp 通过 HTTP 代理进行 Python 连接

目前,我正在使用 Pythonsubprocess.POPEN和 PuTTY进行 SFTP 传输psftp.exe

它正在工作,但不是很干净,也不是很便携。

我想使用 Python pysftp 重现相同的行为,但我不知道在哪里输入所有参数。我在 PuTTY 中有以下配置:

  • 服务器 IP : 123.123.123.255
  • 服务器端口:22
  • 连接类型:SSH
  • 自动登录用户名:MyUser
  • 代理类型:HTTP
  • 代理主机名:gw.proxy.fr
  • 代理端口:1234
  • 代理用户名:ProxyUser
  • 代理密码:ProxyPass

我应该如何在 pysftp 中输入所有这些参数,以便我可以检索我的文件?

编辑:使用 Martin Prikryl 的答案,我发现了一些新的东西可以探索。如果我理解得很好,我需要使用套接字。把我输入我需要的所有信息仍然有一些问题。

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
proxy = ("gw.proxy.fr",1234)
sock.connect(proxy)
target=("123.123.123.255",23)
cmd_connect = "CONNECT {}:{} HTTP/1.1\r\n\r\n".format(*target)
sock.sendall(cmd_connect)
Run Code Online (Sandbox Code Playgroud)

我收到的响应是HTTP/1.0 407 Proxy Authentication Required,这很正常,因为我没有在任何地方使用代理身份验证信息。那么,您知道我如何使用它们并将它们输入到我的套接字中吗?

python windows proxy putty pysftp

5
推荐指数
1
解决办法
5524
查看次数

导入的软件包在Jupyter-Python中不可用

将pysftp导入Jupyter Notebook

将pysftp导入Jupyter Notebook时,显示ModuleNotFoundError

Jupyter快照


检查设备上pysftp的导入?

我已经验证了软件包的安装

点列表点显示pysftp

导入了pysftp软件包(v0.2.9)并将其安装在以下位置

C:\ users \ xxxxxx \ appdata \ roaming \ python \ python37 \ site-packages

pysftp_lib

检查:软件包已安装好


从cmd提示符检查有关软件包正确路径的链接?

我在WIN机器上使用Python 3.7.0,使用验证了站点包的位置

导入syssys.path

该图像确认PATH链接到正确的位置,并且当通过cmd提示符运行python时,该包已成功执行

Python快照

检查:路径链接和cmd运行正常


现在,谁能帮助我解决为什么Jupyter Notebook中的软件包导入会引发错误?

谢谢


编辑1:检查是否安装了其他环境?根据答案之一添加

康达环境

机器中仅存在一种环境

python-3.x pysftp jupyter-notebook

5
推荐指数
1
解决办法
1043
查看次数

将Paramiko AutoAddPolicy与pysftp一起使用

该代码不起作用:

def sftp_connection(self):
    import pysftp
    connection = pysftp.Connection(self.host, username=self.system_name,
                  private_key=os.path.join(HOME, '.ssh', 'id_rsa'))

    # in the next lines I try to use AutoAddPolicy
    client = connection.sftp_client()
    client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
    client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy)
    return connection
Run Code Online (Sandbox Code Playgroud)

这是例外:

def sftp_connection(self):
    import pysftp
    connection = pysftp.Connection(self.host, username=self.system_name,
                  private_key=os.path.join(HOME, '.ssh', 'id_rsa'))

    # in the next lines I try to use AutoAddPolicy
    client = connection.sftp_client()
    client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
    client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy)
    return connection
Run Code Online (Sandbox Code Playgroud)

在尝试设置之前,我得到了例外host_key_policy

我找不到通过pysftp访问客户端实例的其他方法。

有没有办法AutoAddPolicy在我得到异常之前进行设置?

还有一个相关的问题。我的问题是关于如何应用旧问题中提供的几种解决方案之一。

python ssh paramiko pysftp

5
推荐指数
1
解决办法
2476
查看次数

使用Python pysftp使用密钥文件连接到SFTP

我需要连接到SFTP,下载最新文件,然后更改文件名并再次加载到相同的SFTP文件夹并删除“原始名称”文件。我已经使用用户名和密码通过FTP完成了此操作,但是在这种情况下,SFTP具有一个密钥文件(.ppk)。如何将密钥文件设置为密码?

谢谢!

import pysftp

srv = pysftp.Connection(host="your_FTP_server", username="your_username",
password="your_password")

# Get the directory and file listing
data = srv.listdir()

# Closes the connection
srv.close()

# Prints out the directories and files, line by line
for i in data:
   print i
Run Code Online (Sandbox Code Playgroud)

python sftp file pysftp

5
推荐指数
1
解决办法
3119
查看次数

如何在没有 .pem 文件或替代 .pem 文件的情况下通过 AWS Lambda 使用 pysftp 连接 EC2

我想通过 AWS Lambda 使用 pysftp 库连接 EC2。我使用以下代码进行连接。

mysftp = pysftp.Connection(
    host=Constants.MY_HOST_NAME,
    username=Constants.MY_EC2_INSTANCE_USERNAME,
    private_key="./clientiot.pem",
    cnopts=cnopts,
)
Run Code Online (Sandbox Code Playgroud)

我已经将 .pem 文件和部署包放在 AWS Lambda 中。看这张图片:

带有部署包的 pem 文件

有时它有时不起作用,就像有时它说找不到 .pem 文件一样。

"[Errno 2] No such file or directory: './clientiot.pem'"
Run Code Online (Sandbox Code Playgroud)

如何处理?有什么方法可以安全地访问 .pem 文件或 .pem 文件的数据。

我不想在 AWS lambda 中使用 .pem。

python ssh amazon-web-services pysftp aws-lambda

5
推荐指数
1
解决办法
510
查看次数

Python - pysftp / paramiko - 使用其指纹验证主机密钥

此代码引发异常。如何在不将其存储在文件中的情况下验证 SSH 指纹?我相信下面的代码是为公钥设计的。但是带有 SFTP 服务器的客户端验证了指纹并且没有给我公钥。

import os
import shutil

import pysftp
import paramiko

connection_info = {
    'server': "example.com",
    'user': "user",
    'passwd': "password",
    'target_dir': "out/prod",
    'hostkey': "ssh-rsa 2048 d8:4e:f1:f1:f1:f1:f1:f1:21:31:41:14:13:12:11:aa",
}

def move_files_from_server_to_local(server, localpath):
    target_dir = server['target_dir']
    keydata = "d8:4e:f1:f1:f1:f1:f1:f1:21:31:41:14:13:12:11:aa"
    key = paramiko.RSAKey(data=decodebytes(keydata))
    options = pysftp.CnOpts()
    options.hostkeys.add('example.com', 'ssh-rsa', key)
    with pysftp.Connection(
                    server['server'],
                    username=server['user'],
                    password=server['passwd'],
                    cnopts=options) as conn:
        conn.get_d(target_dir, localpath)
        delete_files_from_dir(conn, target_dir)

move_files_from_server_to_local(connection_info, "/")
Run Code Online (Sandbox Code Playgroud)

该代码基于使用 pysftp 验证主机密钥

python ssh paramiko pysftp

4
推荐指数
1
解决办法
1万
查看次数

pysftp putfo 在 SFTP 服务器上创建一个空文件,但不从 StringIO 流式传输内容

我的代码首先将行写入 CSV 中io.StringIO()

fileBuffer = io.StringIO()

# write header
header_writer = csv.DictWriter(fileBuffer, fieldnames=columnNames)
header_writer.writeheader()

# write lines
writer = csv.writer(fileBuffer, delimiter=',') 

for line in data:
            line_dec = line.decode('ISO-8859-1') 
            # print([line_dec])
            writer.writerow([line_dec])
Run Code Online (Sandbox Code Playgroud)

以下代码还打印所有预期行:

$print(fileBuffer.getvalue())    # -> prints all expected rows
Run Code Online (Sandbox Code Playgroud)

我还可以使用 pysftp 成功连接到 SFTP 服务器,甚至在使用 pysftp 时,代码也成功返回所有预期行:

with pysftp.Connection(host, username=user, password=pw, cnopts=cnopts) as sftp: 
            print('sucessfully connected to {} via Port 22'.format(host))
            print(fileBuffer.getvalue())    # -> prints all expected rows
            sftp.putfo(fileBuffer, file2BeSavedAs)   # -> no rows put on FTP Server
Run Code Online (Sandbox Code Playgroud)

实际问题来了: …

python sftp stringio python-3.x pysftp

4
推荐指数
1
解决办法
1176
查看次数

pysftp 库在 AWS lambda 层中不起作用

我想使用pysftp库(Python 脚本)将文件上传到 EC2 实例。所以我创建了小的 Python 脚本,它使用下面的行来连接

pysftp.Connection(
    host=Constants.MY_HOST_NAME,
    username=Constants.MY_EC2_INSTANCE_USERNAME,
    private_key="./mypemfilelocation.pem",
)
some code here .....
pysftp.put(file_to_be_upload, ec2_remote_file_path)
Run Code Online (Sandbox Code Playgroud)

此脚本将使用 .pem 文件将文件从我的本地 Windows 机器上传到 EC2 实例,并且它可以正常工作。

现在我想使用具有 API 网关功能的AWS lambda来执行此操作。

所以我已将 Python 脚本上传到 AWS lambda。现在我不确定如何在 AWS lambda 中使用 pysftp 库,所以我找到了在 AWS lambda 层中添加 pysftp 库层的解决方案。我做到了

pip3 安装 pysftp -t ./library_folder

我制作了上述文件夹的 zip 并添加到 AWS lambda 层中。

但是我仍然有很多错误,比如一个一个:-

没有名为“pysftp”的模块

没有名为“paramiko”的模块

未定义符号:PyInt_FromLong

无法从部分初始化的模块 'bcrypt' 导入名称 '_bcrypt'(很可能是由于循环导入)

找不到 cffi 模块

我只是淡出上述错误我没有找到合适的解决方案。如何在我的 AWS lambda 中无缝使用 pysftp 库?

python amazon-web-services pysftp aws-lambda aws-lambda-layers

4
推荐指数
1
解决办法
2028
查看次数

部署 Django/Heroku 时 PySFTP 失败,并显示“No hostkey for host X found”

我正在尝试部署一个 Django Web 应用程序,该应用程序使用 pysftp 通过某些视图访问 SFTP 服务器。

这个东西在本地开发中运行得很好,但是当尝试在 Heroku 上进行第一次部署时,下面的回溯似乎以错误结束。似乎我需要配置主机密钥,并且我相信我还需要在 Heroku 的known_hosts 中设置它们,但我不知道如何做到这一点。在本地开发中,我使用用户/密码访问没有问题,但从 Heroku 出现此错误:

remote: paramiko.ssh_exception.SSHException: No hostkey for host somehost.myftp.org found
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看整个输出:

remote: -----> Compressing...
remote:        Done: 68.8M
remote: -----> Launching...
remote:  !     Release command declared: this new release will not be available until the command succeeds.
remote:        Released v16
remote:        https://somehostonlineproject.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
remote: Running release command...
remote: 
remote: ===============> ParseResult(scheme='', netloc='', path='somehost.sytes.net', params='', query='', fragment='')
remote: /app/.heroku/python/lib/python3.7/site-packages/pysftp/__init__.py:61: UserWarning: Failed …
Run Code Online (Sandbox Code Playgroud)

python sftp heroku paramiko pysftp

3
推荐指数
1
解决办法
6180
查看次数

AWS Glue 可以通过 SFTP 连接到远程服务器吗?

我正在尝试使用 Python 3.7 通过 SFTP 建立从 AWS Glue 到远程服务器的连接。我尝试使用 pysftp 库来完成此任务。

但 pysftp 使用名为 bcrypt 的库,该库包含 python 和 c 代码。截至目前,AWS Glue 仅支持文档(下面的链接)中提到的纯 python 库。

https://docs.aws.amazon.com/glue/latest/dg/console-custom-created.html

我收到的错误如下。

导入错误:无法导入名称“_bcrypt”

由于编译错误,我被困在这里。

因此,我尝试使用 Scala 的 JSch java 库。编译成功,但出现以下异常。

com.jcraft.jsch.JSchException:java.net.UnknownHostException:[远程服务器主机名]

我们如何通过 SFTP 从 AWS Glue 连接到远程服务器?是否可以?

我们如何为 Glue 作业配置出站规则(如果需要)?

sftp amazon-web-services pysftp aws-glue

3
推荐指数
1
解决办法
8068
查看次数