相关疑难解决方法(0)

使用pysftp验证主机密钥

我正在使用pysftp编写程序,它想要验证SSH主机密钥C:\Users\JohnCalvin\.ssh\known_hosts.

使用PuTTY,终端程序将其保存到注册表[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys].

如何调和pysftp和PuTTY之间的区别?

我的代码是:

import pysftp as sftp

def push_file_to_server():
    s = sftp.Connection(host='138.99.99.129', username='root', password='*********')
    local_path = "testme.txt"
    remote_path = "/home/testme.txt"

    s.put(local_path, remote_path)
    s.close()

push_file_to_server()
Run Code Online (Sandbox Code Playgroud)

我收到的错误响应是:

E:\ Program Files(x86)\ Anaconda3\lib\site-packages\pysftp__init __.py:61:UserWarning:
无法从C:\ Users\JohnCalvin.ssh\known_hosts加载HostKeys.
您需要显式加载HostKeys(cnopts.hostkeys.load(filename))或disableHostKey检查(cnopts.hostkeys = None).warnings.warn(wmsg,UserWarning)Traceback(最近一次调用最后一次):文件"E:\ OneDrive\Python\GIT\DigitalCloud\pysftp_tutorial.py",第14行,在push_file_to_server()文件"E:\ OneDrive\Python\GIT\DigitalCloud\pysftp_tutorial.py",第7行,在push_file_to_server中s = sftp.Connection(host ='138.99.99.129',用户名='root',密码='********')文件"E :\ Program Files(x86)\ Anaconda3\lib\site-packages\pysftp__init __.py",第132行,在 init self._tconnect ['hostkey'] = self._cnopts.get_hostkey(host)文件"E:\ Program Files (x86)\ Anaconda3\lib\site-packages\pysftp__init __.py",第71行,在get_hostkey中引发SSHException("找不到主机%s的主机密钥."%host)paramiko.ssh_exception.SSHException:主机138.99没有主机密钥. 99.129找到了.在以下情况中忽略异常:> Traceback(最近一次调用最后一次):文件"E:\ Program Files(x86)\ Anaconda3\lib\site-packages\pysftp__init __.py",第1013行,在 del self.close()文件中"E :\ Program Files(x86)\ Anaconda3\lib\site-packages\pysftp__init __.py",第784行,如果self._sftp_live关闭:AttributeError:'Connection'对象没有属性'_sftp_live'

python ssh pysftp

53
推荐指数
5
解决办法
6万
查看次数

paramiko上的目录传输

你如何使用paramiko传输完整的目录?我正在尝试使用:

sftp.put("/Folder1","/Folder2")
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误 -

Error : [Errno 21] Is a directory
Run Code Online (Sandbox Code Playgroud)

python paramiko

23
推荐指数
5
解决办法
3万
查看次数

当pysftp连接失败时,“‘Connection’对象没有属性‘_sftp_live’”

我想很好地捕获“找不到主机 *** 的主机密钥”时的错误,并向最终用户提供适当的消息。我试过这个:

import pysftp, paramiko
try: 
    with pysftp.Connection('1.2.3.4', username='root', password='') as sftp:
        sftp.listdir()
except paramiko.ssh_exception.SSHException as e:
    print('SSH error, you need to add the public key of your remote in your local known_hosts file first.', e)
Run Code Online (Sandbox Code Playgroud)

但不幸的是输出不是很好:

SSH error, you need to add the public key of your remote in your local known_hosts file first. No hostkey for host 1.2.3.4 found.
Exception ignored in: <function Connection.__del__ at 0x00000000036B6D38>
Traceback (most recent call last):
  File "C:\Python37\lib\site-packages\pysftp\__init__.py", line 1013, …
Run Code Online (Sandbox Code Playgroud)

python sftp exception paramiko pysftp

18
推荐指数
3
解决办法
3万
查看次数

使用python通过sftp上传文件

我写了一个简单的代码,用于将文件上传到python中的sftp服务器.我正在使用python 2.7

import pysftp

srv = pysftp.Connection(host="www.destination.com", username="root",
password="password",log="./temp/pysftp.log")

srv.cd('public') #chdir to public
srv.put('C:\Users\XXX\Dropbox\test.txt') #upload file to nodejs/

# Closes the connection
srv.close()
Run Code Online (Sandbox Code Playgroud)

该文件未出现在服务器上.但是,没有出现错误消息.代码有什么问题?

编辑:我已启用日志记录.我发现文件上传到根文件夹而不是公共文件夹下.似乎srv.cd('public')没有用.

python sftp python-2.7 pysftp

10
推荐指数
3
解决办法
2万
查看次数

在pysftp get中指定文件模式

我们可以写一个get这样的简单:

import pysftp

hostname = "somehost"
user = "bob"       
password = "123456"  
filename = 'somefile.txt'

with pysftp.Connection(hostname, username=user, private_key='/home/private_key_file') as sftp:
    sftp.get(filename)
Run Code Online (Sandbox Code Playgroud)

但是,我想在文件名中指定一个模式,例如: '*.txt'

关于如何使用这个的任何想法pysftp

python sftp pysftp

10
推荐指数
2
解决办法
6410
查看次数

使用 pysftp 连接到 SFTP 服务器时出现“无法加载主机密钥”警告

我编写了一个 Python 脚本来使用密钥身份验证连接到 SFTP 服务器。它成功连接到服务器,但显示以下警告(见下文)。它是什么意思以及如何删除它。代码中需要进行哪些更改?

我的代码:

import os
import pysftp
import socket
import paramiko
import time
import os.path
import shutil

IP = "127.0.X.X"
myUsername = "USERNAME"
port = 22

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

import os
privatekeyfile = os.path.expanduser("C:\\Users\\Rohan\\.ssh\\cool.prv")
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)

try:
    with pysftp.Connection(host=IP, username=myUsername,private_key=mykey,cnopts=cnopts) as sftp:
        try:
            r=str(socket.gethostbyaddr(IP))
            print("connection successful with "+r)

        except socket.herror:
            print("Unknown host")
except:
    print("connection failed")
Run Code Online (Sandbox Code Playgroud)

警告:

import os
import pysftp
import socket
import paramiko
import time
import os.path
import shutil

IP = "127.0.X.X" …
Run Code Online (Sandbox Code Playgroud)

python ssh paramiko python-3.x pysftp

6
推荐指数
2
解决办法
3万
查看次数

Python将SFTP服务器上的文件移动到另一个文件夹

我编写了这个脚本来将文件从 SFTP 远程文件夹保存到本地文件夹。然后它从 SFTP 中删除该文件。我想更改它,以便它停止删除文件,而是将它们保存到 SFTP 上的备份文件夹中。我如何在 pysftp 中做到这一点?我找不到任何关于它的文档......

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

myHostname = "123"
myUsername = "456"
myPassword = "789"

with pysftp.Connection(host=myHostname, username=myUsername, password="789", cnopts=cnopts) as sftp:
    sftp.cwd("/Production/In/")
    directory_structure = sftp.listdir_attr()
    local_dir= "D:/"
    remote_dir = "/Production/"
    remote_backup_dir = "/Production/Backup/"

    for attr in directory_structure:
        if attr.filename.endswith(".xml"):
            file = attr.filename
            sftp.get(remote_dir + file, local_dir + file)
            print("Moved " + file + " to " + local_dir)
            sftp.remove(remote_dir + file)
Run Code Online (Sandbox Code Playgroud)

不要担心我没有主机密钥或密码。一旦我让脚本工作,我就不会保持这种状态:)

python sftp pysftp

6
推荐指数
1
解决办法
2970
查看次数

将私钥作为字符串/文本传递,而不是在 Python PYSFTP 中传递文件路径

我想传递我的实际私钥值作为参数,而不是提供文件路径。

到目前为止我已经使用了以下代码:

import pysftp
import os

cnopts = pysftp.CnOpts()
if str(host_keys).lower() =='none':
    cnopts.hostkeys = None
else:
    cnopts.hostkeys.load(hostkeys)
filename = os.path.basename(localpath)
print(filename)
remotepath = os.path.join(remotefolder, filename)
print(remotepath)
with pysftp.Connection(host=hostname, port=int(port), username=username, password=password, cnopts=cnopts,private_key=private_key_filepath) as sftp:
    sftp.put(localpath, remotepath=remotepath)
Run Code Online (Sandbox Code Playgroud)

请建议某种方式将其作为文本传递。

例子:

private_key='abcdmyprivatekeytext'
Run Code Online (Sandbox Code Playgroud)

在实际场景中,我会将我的私钥文本放置在安全保管库中。

python ssh sftp pysftp private-key

6
推荐指数
1
解决办法
6917
查看次数

使用 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
查看次数

来自 Linux 的 Python pysftp get_r 在 Linux 上运行良好,但在 Windows 上不起作用

我想使用 Python 2.7 使用 SFTP 递归地将包含文件和子文件夹的整个目录结构从 Linux 服务器复制到本地计算机(Windows 和 Linux)。

我可以在同一台机器上使用 WinSCP ping 服务器并下载文件。

我尝试了以下代码,在 Linux 上运行良好,但在 Windows 上不起作用。

我试过\/os.join,全部给了我同样的错误,检查权限也是如此。

import os
import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    # disable host key checking.
sftp=pysftp.Connection('xxxx.xxx.com', username='xxx', password='xxx', cnopts=cnopts)
sftp.get_r('/abc/def/ghi/klm/mno', 'C:\pqr', preserve_mtime=False)
Run Code Online (Sandbox Code Playgroud)
import os
import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    # disable host key checking.
sftp=pysftp.Connection('xxxx.xxx.com', username='xxx', password='xxx', cnopts=cnopts)
sftp.get_r('/abc/def/ghi/klm/mno', 'C:\pqr', preserve_mtime=False)
Run Code Online (Sandbox Code Playgroud)

python linux windows sftp pysftp

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

标签 统计

python ×10

pysftp ×9

sftp ×6

paramiko ×3

ssh ×3

windows ×2

exception ×1

linux ×1

private-key ×1

proxy ×1

putty ×1

python-2.7 ×1

python-3.x ×1