我正在尝试开始使用Paramiko库,但是当我尝试连接以下简单程序时,库就会抛出异常:
import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Traceback (most recent call last):
File "test.py", line 6, in <module>
ssh.connect('127.0.0.1')
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 316, in connect
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 85, in missing_host_key
paramiko.SSHException: Unknown server 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
无论我尝试哪种服务器都会发生这种情况
所以我在通过 SFTP 连接到远程服务器时遇到了很多问题。我已经尝试过像下面这样的正常方法。
sftp = pysftp.Connection(host='Host',username='username',password='passwd',private_key=".ppk")
Run Code Online (Sandbox Code Playgroud)
哪个不起作用。我收到以下错误:
SSHException: 找不到主机 ***** 的主机密钥。
然后我尝试了以下方法:
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
s = pysftp.Connection(host='host', username='user', password='password', cnopts=cnopts)
Run Code Online (Sandbox Code Playgroud)
这也不起作用。我收到以下错误:
BadAuthenticationType: ('Bad authentication type', ['publickey']) (allowed_types=['publickey'])
同样,当我运行以下命令时:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("host",username = "username",password = "password")
ssh_session = client.get_transport().open_session()
Run Code Online (Sandbox Code Playgroud)
我犯了同样的错误:
BadAuthenticationType: ('Bad authentication type', ['publickey']) (allowed_types=['publickey'])
我正在尝试加载(并直接保存在本地).csv存储在FTP服务器(SFTP协议)上的文件.我正在将Python与pysftp库结合使用.当我检查文件是否存在时,它返回TRUE.但是在尝试加载文件时,无论我尝试什么,它似乎都是空的.
如何将文件存入(并存储)到我的本地环境?我想念一些明显的东西吗?
import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
# Make connection to sFTP
with pysftp.Connection(hostname,
username=sftp_username,
password=sftp_pw,
cnopts = cnopts
) as sftp:
sftp.isfile('directory/file.csv')) ## TRUE
file = sftp.get('directory/file.csv')
print(file) ## None
sftp.close()
Run Code Online (Sandbox Code Playgroud) 我有一个简单的要求在SFTP服务器上删除文件.我发现pysftp和Paramiko库似乎允许我这样做并使用Paramiko开发了一个简单的应用程序,但我找不到比较两者的正确来源,所以我可以决定哪个我可以/应该使用.每种方法的优缺点是什么?
我的代码:
import pysftp
s = pysftp.Connection(host='test.rebex.net', username='demo', password='password')
data = s.listdir()
s.close()
for i in data:
print i
Run Code Online (Sandbox Code Playgroud)
我尝试使用pysftp连接到SFTP服务器时出错.
这应该是直截了当的,但我得到以下错误:
Traceback (most recent call last):
File "/Users/gavinhinfey/Documents/Python Files/sftp_test.py", line 3, in <module>
s = pysftp.Connection(host='test.rebex.net', username='demo', password='password')
File "build/bdist.macosx-10.6-intel/egg/pysftp.py", line 55, in __init__
File "build/bdist.macosx-10.5-intel/egg/paramiko/transport.py", line 303, in __init__
paramiko.SSHException: Unable to connect to test.rebex.net: [Errno 60] Operation timed out
Exception AttributeError: "'Connection' object has no attribute '_tranport_live'" in <bound method Connection.__del__ of <pysftp.Connection object at 0x101a5a810>> ignored
Run Code Online (Sandbox Code Playgroud)
我尝试使用不同版本的python(主要是2.7),我已经安装了所有依赖项,并尝试了大量的sftp连接.我正在使用OS X …
我正在尝试使用 Paramiko 在专用网络上的两台服务器之间进行 SSH 通信。客户端服务器是一个 Web 服务器,而主机服务器将是一个“工人”服务器。这个想法是不向 HTTP 连接开放工作服务器。唯一需要发生的通信是 Web 服务器需要将字符串传递给工作服务器上的脚本。为此,我希望使用 Paramiko 并通过 SSH 将信息传递给脚本。
我设置了一个新用户并在 Python 3 中创建了一个测试脚本,当我从我自己用户的 SSH 会话中的命令行运行它时,它可以工作。我将相同的代码放入我的 Django Web 应用程序中,认为它应该可以工作,因为它从命令行测试正常,但出现以下错误:
在 known_hosts 中找不到服务器“worker-server”
现在,我想我明白这个错误了。在执行测试脚本时,我使用某个用户访问服务器,~/.ssh/known_hosts即使该用户实际上是为这项工作创建的第 3 方用户,但已知主机信息仍会保存。因此 Django 应用程序正在另一个用户下运行,该用户找不到已保存的已知主机信息,因为它无权访问该文件夹。据我所知,Apache 用来执行 Django 脚本的用户没有主目录。
有没有办法以Django进程可以看到的方式添加这个已知主机?
脚本:
import paramiko
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('worker-server', 22, 'workeruser', 'workerpass')
code = "123wfdv"
survey_id = 111
stdin, stdout, stderr =
client.exec_command('python3 /path/to/test_script/test.py %s %s' % ( code, survey_id ))
print( "ssh succuessful. Closing connection" )
stdout = stdout.readlines()
client.close()
print ( …Run Code Online (Sandbox Code Playgroud) 我编写了一个 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) 我编写了这个脚本来将文件从 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 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) 该代码不起作用:
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在我得到异常之前进行设置?
还有一个相关的问题。我的问题是关于如何应用旧问题中提供的几种解决方案之一。