使用Python进行SSH和文件传输实现方法实例
作者:简讯Alfred 爱生活爱扣钉
引言
SSH 通常用于访问远程机器并运行命令、检索文件或上传文件。你可以使用 SFTP(安全文件传输协议)和 SCP(安全复制协议)将文件从远程机器传输到本地,反之亦然。
根据 paramiko.org 的介绍,python paramiko 模型提供了 SSHv2 协议的抽象,包括客户端和服务器端功能。作为客户端,您可以使用密码或密钥进行身份验证;作为服务器,您可以决定允许哪些用户访问以及允许访问的通道。
在本文中,我将重点介绍客户端。
使用Python进行SSH和文件传输
Paramiko.SSHClient 是 API 中记录的 Paramiko 的主要客户端,可用于与远程服务器建立连接并传输文件。
建立连接
import paramiko ssh_client=paramiko.SSHClient() ssh_client.connect(hostname='hostname',username='admin',password='password')
当你首次连接的时候,可能会遇到以下问题:
missing_host_key raise SSHException('Server %r not found in known_hosts' % hostname) paramiko.ssh_exception.SSHException: Server 'hostname' not found in known_hosts
之所以会出现这个错误,是因为你没有告知你的机器,你 "信任 "你试图访问的远程服务器。如果您在命令行或终端上首次尝试连接服务器,您会收到类似下面的信息:
The authenticity of host 'hostname' can't be established.RSA key fingerprint is 'key'. Are you sure you want to continue connecting (yes/no)?
当您在这里选择 "yes" 时,您就会让您的机器知道它可以信任该机器,您现在就可以访问它而无需提示,直到该机器的密钥发生变化。同样,Paramiko 还要求您验证对机器的信任。这种验证是通过调用 SSHClient 上的 set_missing_host_key_policy()
,并在访问新的远程机器时传递你希望执行的策略来完成的。默认情况下,paramiko.SSHclient 会将策略设置为 RejectPolicy。如上文所述,该策略无需验证就会拒绝连接。不过,Paramiko 提供了一种 "信任所有 "密钥策略(AutoAddPolicy)。将 AutoAddPolicy 实例解析为 set_missing_host_key_policy()
,可将其改为允许任何主机。
现在再运行代码就不会报错了。
在远程计算机上运行命令
要运行命令,需要在 SSHClient 上调用 exec_command
,并传递命令。响应将以元组(stdin, stdout, stderr
)形式返回。
例如,列出一个目录中的所有文件:
stdin, stdout, stderr = ssh_client.exec_command("ls")
根据 paramiko.org 的解释:
• stdin
是只写文件,可用于需要输入的命令;
• stdout
文件提供命令的输出结果;
• stderr
文件给出执行命令时返回的错误。如果没有错误,则为空。
需要输入的命令
有时,您需要提供密码或额外的输入信息才能运行命令。这就是 stdin 的用途。让我们用 sudo 运行上面的命令。
stdin, stdout, stderr = ssh.exec_command("sudo ls") stdin.write('mypassword\n') print(stdout.readlines())
这样就通过输入密码来执行了 ls
命令。
文件传输
文件传输由 paramiko.SFTPClient 处理,您可以在 Paramiko.SSHClient 实例上调用 open_sftp()
,获得该客户端。
从远程机器下载文件
ftp_client=ssh_client.open_sftp() ftp_client.get('remotefileth','localfilepath') ftp_client.close()
从本地向远程机器上传文件
ftp_client=ssh.open_sftp() ftp_client.put('localfilepath', 'remotefilepath') ftp_client.close()
如果你也在工作活学习中需要用 Python 操作使用 SSH,不妨试试 paramiko,会为你带来效率上的提高。
以上就是使用Python进行SSH和文件传输实现方法实例的详细内容,更多关于Python SSH文件传输的资料请关注脚本之家其它相关文章!