-
简介
paramiko是Python编程语言中的一个用于进行SSHv2协议操作的模块。通过paramiko模块,我们可以实现基于SSH协议的远程连接,包括文件传输、命令执行等操作。本文将详细讲解paramiko模块的基础操作以及可能出现的排错问题等。 -
安装paramiko模块
使用pip指令来安装paramiko模块,命令如下:
pip install paramiko
- 连接远程主机
使用paramiko实现远程主机连接的关键在于Transport和SSHClient。Transport可以理解为一个传输层,用于负责安全的传输通道。SSHClient则为上层协议的封装,提供接口用于连接、传输文件等。下面,我们来看看如何建立连接。
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("hostname", port, "username", "password")
其中,hostname为远程主机的IP地址,port为SSH端口号,也就是22;username为登录用户名,password为登录密码。需要注意的是,在第一次连接时,需要加入“ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())”这行代码,将服务器端的RSA密钥添加到本地的~/.ssh/known_hosts文件中,之后建立连接才能成功
- 文件传输
使用SFTP,可以实现在两个不同的Linux系统之间传输文件。下面是一个完整的示例。
import paramiko
import os, sys
def upload(host_ip, user_name, password, local_file, remote_file):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host_ip, 22, user_name, password)
transport = paramiko.Transport((host_ip, 22))
transport.connect(username=user_name, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(local_file, remote_file)
transport.close()
ssh.close()
def download(host_ip, user_name, password, remote_file, local_file):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host_ip, 22, user_name, password)
transport = paramiko.Transport((host_ip, 22))
transport.connect(username=user_name, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.get(remote_file, local_file)
transport.close()
ssh.close()
其中,upload函数可实现将本地的local_file上传到host_ip主机上的remote_file路径下,download函数可实现从主机host_ip上下载remote_file文件到本地local_file路径下。需要注意的是,在上传文件时,remote_file的路径必须已经存在,否则会抛出异常。
- 常见排错问题
(1) AuthenticationException
paramiko包中的最常见错误就是AuthenticationException。如果登录失败,会引发此异常。需要检查用户名和密码是否正确,并且检查ssh服务配置文件/etc/ssh/sshd_config是否有定义允许root用户登录。
(2) BadAuthenticationType
如果使用paramiko包在连接SSH服务器时提示BadAuthenticationType错误,可能是由于SSH服务器配置中没有启用密码方式登录。此时,需要修改ssh服务配置文件/etc/ssh/sshd_config文件中的配置(将“PasswordAuthentication no”修改成“PasswordAuthentication yes”),然后重启ssh服务即可解决。
- 总结
paramiko是一款非常适合Python编程人员进行远程连接操作的SSH协议模块。其功能包括了基于SSH协议的远程连接、文件传输等。在使用paramiko进行远程连接时,需要注意检查用户名和密码是否正确,以及服务器端配置文件是否合理等问题,以获得良好的开发体验。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中paramiko模块的基础操作与排错问题 - Python技术站