Python进阶之-paramiko详解

Python进阶之-paramiko详解ssh 是一个协议 OpenSSH 是其中一个开源实现 paramiko 是 Python 的一个库 实现了 SSHv2 协议 底层使用 cryptography

大家好,欢迎来到IT知识分享网。

✨简介:

🌟安装Paramiko

首先,需要确保安装了Paramiko。可以使用pip来安装:

pip install paramiko 

🌟Paramiko的主要类

✨示例

🌟SSH连接并执行命令

import paramiko # 创建SSH客户端 client = paramiko.SSHClient() # 自动添加未知的服务器密钥及策略 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接SSH服务端 client.connect('hostname', port=22, username='username', password='password') # 执行命令 stdin, stdout, stderr = client.exec_command('ls -l') # 获取命令执行结果 result = stdout.read() print(result.decode()) # 关闭连接 client.close() 

🌟通过SFTP上传和下载文件

import paramiko # 创建SSH客户端 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect('hostname', port=22, username='username', password='password') # 创建SFTP会话 sftp = client.open_sftp() # 上传文件 sftp.put('localfile.txt', '/remote/path/remote.txt') # 下载文件 sftp.get('/remote/path/remote.txt', 'localfile.txt') # 关闭SFTP会话和SSH连接 sftp.close() client.close() 

⚠️注意事项

🌟SSH方法的封装

下面提供一个比较简单的对SSH连接的封装的例子,实现了代理和不需要代理的方式连接服务器,以及发送命令,希望对大家有用。

#!/usr/bin/env python # coding=utf-8 """ # @Time : 2024/5/9 # @Author : Summer # @File : SSH # @describe: """ import paramiko class SSHClient: def __init__(self, hostname, port=22, username=None, password=None, pkey=None, use_proxy=False, proxy_hostname=None, proxy_port=None, proxy_username=None, proxy_password=None, timeout=5): """ 初始化SSH客户端。 :param hostname: 主机名或IP地址 :param port: 端口号,默认是22 :param username: 用户名 :param password: 密码 :param pkey: 私钥文件对象,用于密钥认证 :param use_proxy: 是否使用代理标志 :param proxy_hostname: 代理的主机名称 :param proxy_port: 代理的端口号 :param proxy_username: 代理的用户名 :param proxy_password: 代理的密码 """ self.hostname = hostname self.port = port self.username = username self.password = password self.pkey = pkey self.use_proxy = use_proxy self.proxy_hostname = proxy_hostname self.proxy_port = proxy_port self.proxy_username = proxy_username self.proxy_password = proxy_password self.client = None self.timeout = timeout def _setup_proxy(self): """ 配置代理。 """ if self.use_proxy: proxy_ssh = paramiko.SSHClient() proxy_ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) proxy_ssh.connect(hostname=self.proxy_hostname, port=self.proxy_port, username=self.proxy_username, password=self.proxy_password, timeout=self.timeout) vm_transport = proxy_ssh.get_transport() remote_address = (self.hostname, self.port) local_address = (self.proxy_hostname, self.proxy_port) vm_channel = vm_transport.open_channel("direct-tcpip", remote_address, local_address) return vm_channel else: return None def _connect(self): """ 创建SSH连接。 """ self.client = paramiko.SSHClient() self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) proxy = self._setup_proxy() self.client.connect(self.hostname, port=self.port, username=self.username, password=self.password, pkey=self.pkey, sock=proxy, timeout=self.timeout) def exec_command(self, command): """ 在远程服务器上执行命令。 :param command: 要执行的命令字符串 :return: 命令输出结果的标准输出和标准错误 """ if self.client is None: self._connect() stdin, stdout, stderr = self.client.exec_command(command) return stdout.read().decode(), stderr.read().decode() def close(self): """ 关闭SSH连接。 """ if self.client: self.client.close() self.client = None # 使用示例 if __name__ == "__main__": # 直接连接 ssh = SSHClient(hostname='hostname', port=22, username='username', password='password') stdout, stderr = ssh.exec_command('ls -l') print(stdout) ssh.close() # 通过代理连接 ssh_with_proxy = SSHClient(hostname='hostname', port=22, username='username', password='password', use_proxy=True, proxy_hostname='proxy_hostname', proxy_port=22, proxy_username='proxy_username', proxy_password='proxy_password') stdout, stderr = ssh_with_proxy.exec_command('ls -l') print(stdout) ssh_with_proxy.close() 

✨paramiko和pexpect对比

Paramiko和pexpect都是Python库,用于与外部进程、系统和设备进行交互,但它们的设计目的和使用场景存在明显的区别。

🌟Paramiko

🌟pexpect

🌟对比与优势

根据具体使用场景来选择适合的工具是关键。如果任务主要涉及SSH连接,文件传输然后执行远程命令,Paramiko是更好的选择。如果目标是广泛的自动化控制各种命令行交互,而不仅仅是通过SSH,那么pexpect是更合适的选择。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110809.html

(0)
上一篇 2026-01-29 08:26
下一篇 2026-01-29 08:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信