Python模块之paramiko详细功能介绍及示例

以下是 Python paramiko 模块的常用方法及实际场景的详细说明和示例。paramiko 是一个用于 SSH 协议操作的库,支持远程命令执行、文件传输(SFTP)等功能,广泛应用于服务器管理和自动化运维。


一、核心类与方法

1. SSHClient
  • 用途:管理 SSH 连接、执行远程命令、传输文件。
  • 关键方法
    • connect():建立 SSH 连接。
    • exec_command():执行远程命令。
    • open_sftp():创建 SFTP 客户端。
    • set_missing_host_key_policy():设置主机密钥验证策略(如自动接受新主机)。
2. SFTPClient
  • 用途:通过 SSH 协议进行文件传输。
  • 关键方法
    • put():上传本地文件到远程服务器。
    • get():下载远程文件到本地。
    • mkdir():在远程服务器创建目录。
    • listdir():列出远程目录内容。
3. AutoAddPolicy
  • 用途:自动添加未知主机的密钥到本地 known_hosts 文件(适用于测试环境)。

二、实际场景与示例

场景 1:远程执行命令(如重启服务)
import paramiko

# 创建 SSH 客户端
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 自动接受新主机

try:
    # 连接服务器
    client.connect(
        hostname="192.168.1.100",
        port=22,
        username="admin",
        password="your_password"
    )

    # 执行命令(检查服务状态)
    stdin, stdout, stderr = client.exec_command("systemctl status nginx")
    output = stdout.read().decode()
    print("服务状态:", output)

    # 重启服务(需要管理员权限)
    stdin, stdout, stderr = client.exec_command("sudo systemctl restart nginx")
    print("重启结果:", stderr.read().decode())

except paramiko.AuthenticationException:
    print("认证失败!")
except paramiko.SSHException as e:
    print(f"SSH 连接错误: {e}")
finally:
    client.close()

场景 2:通过 SFTP 上传/下载文件(如部署代码)
import paramiko
from paramiko import SFTPClient

# 创建 SSH 客户端并连接
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("192.168.1.100", username="admin", password="your_password")

# 创建 SFTP 客户端
sftp: SFTPClient = client.open_sftp()

try:
    # 上传本地文件到远程服务器
    sftp.put(localpath="local/app.tar.gz", remotepath="/opt/app/app.tar.gz")
    print("文件上传成功!")

    # 下载远程日志文件到本地
    sftp.get(remotepath="/var/log/nginx/access.log", localpath="local/access.log")
    print("文件下载成功!")

    # 创建远程目录(需权限)
    sftp.mkdir("/opt/app/backup")

except IOError as e:
    print(f"文件操作失败: {e}")
finally:
    sftp.close()
    client.close()

场景 3:使用密钥认证(安全运维)
import paramiko

# 指定私钥路径(默认读取 ~/.ssh/id_rsa)
private_key = paramiko.RSAKey.from_private_key_file("/path/to/private_key.pem")

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    client.connect(
        hostname="192.168.1.100",
        username="admin",
        pkey=private_key  # 使用密钥认证
    )

    # 执行需要高权限的命令
    stdin, stdout, stderr = client.exec_command("sudo docker ps")
    print("运行中的容器:", stdout.read().decode())

except paramiko.SSHException as e:
    print(f"SSH 错误: {e}")

场景 4:交互式 Shell(如配置交换机)
import paramiko

client = paramiko.SSHClient()
client.connect("192.168.1.1", username="admin", password="cisco123")

# 创建交互式 Shell 会话
channel = client.invoke_shell()

# 发送配置命令
commands = [
    "configure terminal",
    "interface GigabitEthernet0/1",
    "ip address 192.168.2.1 255.255.255.0",
    "no shutdown",
    "end"
]

for cmd in commands:
    channel.send(cmd + "\n")
    # 等待命令执行(避免输出混乱)
    while not channel.recv_ready():
        pass
    output = channel.recv(4096).decode()
    print(f"命令 {cmd} 输出:\n{output}")

client.close()

三、高级功能

1. 处理超时和连接异常
try:
    client.connect(
        "192.168.1.100",
        username="admin",
        password="your_password",
        timeout=10  # 设置连接超时时间
    )
except paramiko.ssh_exception.NoValidConnectionsError:
    print("无法连接到服务器!")
2. 通过代理跳转连接内网服务器
# 先连接跳板机
jump_host = paramiko.SSHClient()
jump_host.connect("jump.example.com", username="user", password="pass")

# 通过跳板机建立到内网服务器的连接
transport = jump_host.get_transport()
dest_addr = ("192.168.1.100", 22)
local_addr = ("jump.example.com", 22)
channel = transport.open_channel("direct-tcpip", dest_addr, local_addr)

# 创建内网服务器的 SSH 客户端
inner_client = paramiko.SSHClient()
inner_client.connect("192.168.1.100", username="admin", sock=channel)

四、总结

功能适用场景关键方法
远程命令执行批量服务器管理、服务重启exec_command()
SFTP 文件传输代码部署、日志下载put(), get(), listdir()
密钥认证安全运维(避免密码泄露)pkey=private_key
交互式 Shell网络设备配置(如交换机、路由器)invoke_shell()
代理连接访问内网服务器(通过跳板机)open_channel("direct-tcpip")
优缺点:
  • 优点:支持完整的 SSH/SFTP 协议、灵活性强。
  • 缺点:性能较低(不适合高并发)、依赖系统库(需安装 libssh2)。

通过 paramiko,可以实现服务器自动化运维、网络设备配置等复杂操作,是 Python 运维脚本的核心工具之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值