Paramiko 使用教程

简介

Paramiko 是一个基于 Python 的 SSH 客户端库,它提供了在网络上安全传输文件和执行远程命令的功能。本教程将介绍 Paramiko 的基本用法,包括连接到远程服务器、执行命令、文件传输等常见操作。

安装 Paramiko

可以使用 pip 命令安装 Paramiko:

pip install paramiko

连接到远程服务器

创建一个 SSHClient 对象,使用 connect() 方法连接到远程服务器:

# 创建 SSHClient 实例
ssh_client = paramiko.SSHClient()
# 允许连接不在 known_hosts 文件中的主机
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程服务器
ssh_client.connect(hostname, port, username, password)

执行远程命令

使用 exec_command() 方法执行远程命令,并获取输入、输出和错误流:

# 执行远程命令
stdin, stdout, stderr = ssh_client.exec_command(command)
# 向执行命令写入信息(一般交互式命令会用到)
stdin.write(content)
# 读取执行命令的输出信息
output = stdout.read().decode()
# 读取执行命令的报错信息
error = stderr.read().decode()

文件传输

创建一个 SFTPClient 对象,使用 put() 和 get() 方法上传和下载文件:

# 创建 SFTPClient 实例
sftp_client = ssh_client.open_sftp()
# 上传文件
sftp_client.put(local_path, remote_path)
# 下载文件
sftp_client.get(remote_path, local_path)

示例

下面是一个完整示例,演示了 Paramiko 的基本用法,包括连接到远程服务器、执行命令、文件传输等常见操作:

import paramiko
import time

def ssh_connect(hostname, port, username, password):
    # 创建 SSHClient 实例
    ssh_client = paramiko.SSHClient()
    # 允许连接不在 known_hosts 文件中的主机
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接到远程服务器
    ssh_client.connect(hostname, port, username, password)

    return ssh_client

def ssh_vim(ssh_client, path, text):
    # 执行 vim 命令,并获取输入、输出和错误流
    stdin1, stdout1, stderr1 = ssh_client.exec_command(f'vim {path}')
    # 进入插入模式
    stdin1.write('i')
    # 插入文本
    stdin1.write(text)
    # esc 键,退出插入模式
    stdin1.write('\x1b')
    # 保持并退出
    stdin1.write(':wq\n')
    # 关闭执行命令的输入流
    stdin1.close()
    # 等待 3 秒后,再查看文件内容,太快可能获取不到最新的文件内容
    time.sleep(3)
    # 执行 cat 命令,并获取输入、输出和错误流
    stdin2, stdout2, stderr2 = ssh_client.exec_command(f'cat {path}')
    # 读取执行命令的输出信息和错误信息,并输出到控制台
    print(stdout2.read().decode(), stderr2.read().decode())

def sftp_put(ssh_client, local_path, remote_path):
    # 创建 SFTPClient 实例
    sftp_client = ssh_client.open_sftp()
    # 上传文件
    sftp_client.put(local_path, remote_path)
    # 关闭 SFTP 连接
    sftp_client.close()

def sftp_get(ssh_client, remote_path, local_path):
    # 创建 SFTPClient 实例
    sftp_client = ssh_client.open_sftp()
    # 下载文件
    sftp_client.get(remote_path, local_path)
    # 关闭 SFTP 连接
    sftp_client.close()

if __name__ == '__main__':
    # 连接到远程服务器
    ssh_client = ssh_connect(hostname, port, username, password)
    # 执行 vim 命令
    ssh_vim(ssh_client, path, text)
    # 上传文件
    sftp_put(ssh_client, local_path, remote_path)
    # 下载文件
    sftp_get(ssh_client, remote_path, local_path)
    # 关闭 SSH 连接
    ssh_client.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值