【实战演练】python远程工具包paramiko使用
发布时间: 2024-06-28 22:18:35 阅读量: 94 订阅数: 107
![【实战演练】python远程工具包paramiko使用](https://img-blog.csdnimg.cn/a132f39c1eb04f7fa2e2e8675e8726be.jpeg)
# 1. Python远程工具包Paramiko简介**
Paramiko是一个用于Python的SSH2协议的库,它提供了对远程服务器的连接、命令执行和文件传输等功能。Paramiko可以广泛应用于自动化任务、系统管理和网络安全等领域。
# 2. Paramiko基础
### 2.1 Paramiko的安装和配置
**安装 Paramiko**
```python
pip install paramiko
```
**配置 Paramiko**
Paramiko 依赖于 OpenSSH 库,因此需要确保系统已安装 OpenSSH。在 Linux 系统上,通常可以通过以下命令安装 OpenSSH:
```shell
sudo apt-get install openssh-client openssh-server
```
在 Windows 系统上,可以使用以下命令安装 OpenSSH:
```shell
choco install openssh
```
### 2.2 SSH连接的建立和管理
#### 2.2.1 SSH连接的建立
**创建 SSHClient 实例**
```python
import paramiko
ssh = paramiko.SSHClient()
```
**设置 SSH 连接参数**
```python
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port, username, password)
```
* `hostname`:远程主机的 IP 地址或域名
* `port`:远程主机的 SSH 端口(默认为 22)
* `username`:远程主机的用户名
* `password`:远程主机的密码
**参数说明**
* `set_missing_host_key_policy`:设置处理未知主机密钥的策略,`AutoAddPolicy` 会自动添加未知主机密钥到本地数据库。
* `connect`:建立 SSH 连接。
#### 2.2.2 SSH连接的管理
**执行 SSH 命令**
```python
stdin, stdout, stderr = ssh.exec_command(command)
```
* `command`:要执行的远程命令
**获取命令执行结果**
```python
stdout.read().decode()
stderr.read().decode()
```
**关闭 SSH 连接**
```python
ssh.close()
```
**参数说明**
* `exec_command`:执行远程命令,并返回标准输入、输出和错误流。
* `read`:读取标准输出或错误流中的数据。
* `decode`:将字节流解码为字符串。
* `close`:关闭 SSH 连接。
# 3. Paramiko远程命令执行
### 3.1 远程命令的执行
Paramiko提供了两种方式来执行远程命令:同步执行和异步执行。
#### 3.1.1 同步执行远程命令
同步执行远程命令会阻塞当前线程,直到命令执行完毕。使用`exec_command()`方法可以同步执行远程命令,其语法如下:
```python
exec_command(command, get_pty=False, timeout=None, environment=None)
```
**参数说明:**
* `command`: 要执行的远程命令。
* `get_pty`: 是否为命令分配一个伪终端。默认为`False`。
* `timeout`: 命令执行的超时时间(以秒为单位)。默认为`None`(无超时)。
* `environment`: 要传递给命令的环境变量字典。默认为`None`。
**代码示例:**
```python
import paramiko
# 创建SSH客户端
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程主机
client.connect('192.168.1.100', 22, 'username', 'password')
# 执行远程命令
stdin, stdout, stderr = client.exec_command('ls -la')
# 获取命令输出
output = stdout.read().decode('utf-8')
# 关闭连接
client.close()
```
#### 3.1.2 异步执行远程命令
异步执行远程命令不会阻塞
0
0