Python Paramiko使用示例
什么是Paramiko?
Paramiko 是 Python 实现的 SSH 客户端,提供了 SSH2 协议的完整实现。它支持加密和身份验证的混合模式,并可用于同时处理多个客户端连接。
安装Paramiko
你可以在终端中使用Python包管理器pip来安装Paramiko,只需要在命令行输入pip install Paramiko
便可安装。
基本使用方法
连接SSH
Paramiko 使用 SSHClient 类是连接 SSH 服务器的最简单方法。下面是使用 SSHClient 类连接到 SSH 服务器的步骤:
import paramiko
# 创建一个paramiko的SSH客户端
ssh = paramiko.SSHClient()
# 默认情况下,SSHClient 连接远程主机时不接受不在自身信任列表内的主机
# 可以加载本地的know_hosts文件
ssh.load_system_host_keys()
# 连接SSH服务器,需要传入SSH服务器的地址、端口、用户名以及密码
ssh.connect('192.168.10.10', port=22, username='your_username', password='your_password')
执行命令
SSHClient 的 exec_command() 方法是 Paramiko 中执行远程命令的方法。当调用它时,命令将在远程服务器上执行并返回结果。
stdin, stdout, stderr = ssh.exec_command('echo "Hello World"')
ssh.close()
上传和下载文件
你也可以使用 Paramiko 连接到远程服务器并通过 SCP 协议上传和下载文件。下面是使用 SCP 协议将文件从本地计算机上传到远程服务器的方法:
import paramiko
t = paramiko.Transport(('192.168.10.10', 22))
t.connect(username='your_username', password='your_password')
sch = paramiko.SFTPClient.from_transport(t)
local_path = '/path/to/local/file'
remote_path = '/path/to/remote/file'
sch.put(local_path, remote_path)
t.close()
从远程服务器下载文件到本地计算机的方法如下:
import paramiko
t = paramiko.Transport(('192.168.10.10', 22))
t.connect(username='your_username', password='your_password')
sch = paramiko.SFTPClient.from_transport(t)
local_path = '/path/to/local/file'
remote_path = '/path/to/remote/file'
sch.get(remote_path, local_path)
t.close()
示例说明
示例一
下面是一个使用 Paramiko 连接到远程服务器并执行一些基本命令的例子:
import paramiko
class SSH:
def __init__(self, host, port, username, password):
self.host = host
self.port = port
self.username = username
self.password = password
def connect(self):
try:
self._transport = paramiko.Transport((self.host, self.port))
self._transport.connect(username=self.username, password=self.password)
self._session = self._transport.open_channel(kind='session')
self._session.invoke_shell()
print(f'连接到主机{self.host}成功')
except Exception as e:
print(f'连接失败 {e}')
def run_cmd(self, command):
"""
执行命令,支持多个命令之间用换行符隔开
:param command: 需要执行的命令
"""
try:
output = ''
for cmd in command.split('\n'):
if cmd.strip() != '':
self._session.send(cmd+'\n')
while True:
data = self._session.recv(1024).decode()
output += data
if output.endswith('$ ') or output.endswith('# '):
break
return output
except Exception as e:
print(f'执行命令时出错 {e}')
def disconnect(self):
try:
self._transport.close()
except Exception as e:
print(f'关闭SSH连接时出错 {e}')
示例一中实现了一个远程SSH连接的类,该类中有三个方法:
- connect():连接到SSH服务器。建立连接后可以执行其他操作。
- run_cmd():执行完整命令。支持多个命令之间用换行符隔开。
- disconnect():关闭SSH连接。
这个类的使用方式如下:
# 创建SSH对象
ssh = SSH('192.168.10.10', 22, 'your_username', 'your_password')
# 连接到SSH服务器
ssh.connect()
# 执行命令
output = ssh.run_cmd('ls; echo "Hello World"')
# 断开连接
ssh.disconnect()
示例二
下面是一个使用 Paramiko 在远程服务器上下载文件的例子:
import paramiko
class SFTP:
def __init__(self, host, port, username, password):
self.host = host
self.port = port
self.username = username
self.password = password
def connect(self):
try:
self._transport = paramiko.Transport((self.host, self.port))
self._transport.connect(username=self.username, password=self.password)
self._sftp = paramiko.SFTP.from_transport(self._transport)
print(f'连接到主机{self.host}成功')
except Exception as e:
print(f'连接失败 {e}')
def sftp_get(self, remote_file_path, local_file_path):
"""
从服务器下载文件
:param remote_file_path: 远程服务器文件路径
:param local_file_path: 本地文件路径
"""
try:
self._sftp.get(remote_file_path, local_file_path)
print(f'文件下载成功,本地路径为: {local_file_path}')
except Exception as e:
print(f'文件下载失败,请检查远程文件路径和本地文件路径是否正确')
print(str(e))
def disconnect(self):
try:
self._transport.close()
print(f'与主机{self.host}断开连接成功')
except Exception as e:
print(f'关闭SFTP连接时出错 {e}')
示例二中呈现了一个远程SFTP连接的类,该类中有三个方法:
- connect():连接到SFTP服务器。建立连接后可以执行其他操作。
- sftp_get():从服务器下载文件。
- disconnect():关闭SFTP连接。
这个类的使用方式如下:
# 创建SFTP对象
sftp = SFTP('192.168.10.10', 22, 'your_username', 'your_password')
# 连接到SFTP服务器
sftp.connect()
# 下载文件到本地计算机
sftp.sftp_get('/path/to/remote/file', '/path/to/local/file')
# 断开连接
sftp.disconnect()
总结
在本篇攻略中,我们学习了如何使用 Paramiko 去连接 SSH 服务器、执行命令、上传下载文件。我们建立了一个 SSH 和 SFTP 类,这些类封装了常用的操作,你可以使用这些类快速地去连接 SSH 服务器,执行命令和上传下载文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python Paramiko使用示例 - Python技术站