ZetCode

Python paramiko

最后修改于 2024 年 1 月 29 日

本文介绍了 Python paramiko 模块,该模块用于操作 SSH 协议。

SSH 是一种网络通信协议,它使两台计算机能够安全地通信和共享数据。术语 SSH 用于网络协议以及实现该协议的实用工具套件。

管理员使用 SSH 工具来安全地管理远程计算机。

默认情况下,SSH 服务器在 TCP 端口 22 上侦听。

OpenSSH

OpenSSH 是 SSH 协议的一个流行的开源实现。

OpenSSH 提供以下工具

Paramiko

Paramiko 是 SSHv2 协议的 Python 实现。它提供客户端和服务器功能。 它是流行的 Fabric 工具的基础库。

$ pip install paramiko

Paramiko 是一个第三方工具;可以使用 pip 工具安装它。

Python paramiko 命令执行

在第一个示例中,我们在远程主机上执行命令。

exec_cmd.py
#!/usr/bin/python

import paramiko

hostname = 'example.com'
port = 22

username = 'user7'
password = 'passwd'

cmd = 'uname'

with paramiko.SSHClient() as client:

    client.load_system_host_keys()
    client.connect(hostname, port, username, password)

    (stdin, stdout, stderr) = client.exec_command(cmd)

    output = stdout.read()
    print(str(output, 'utf8'))

在该程序中,我们执行 uname 命令,该命令返回操作系统的名称。

import paramiko

首先,我们导入 paramiko 模块。

hostname = 'example.com'
port = 22

我们提供远程主机名和端口。

username = 'user7'
password = 'passwd'

我们提供用户名和密码。

cmd = 'uname'

这是要执行的命令。

with paramiko.SSHClient() as client:

创建一个 SSH 客户端。

client.load_system_host_keys()

我们使用 load_system_host_keys 加载系统主机密钥。

client.connect(hostname, port, username, password)

我们使用 connect 连接到远程主机。我们将主机名、端口、用户名和密码传递给该函数。

(stdin, stdout, stderr) = client.exec_command(cmd)

使用 exec_command 函数执行命令。

output = stdout.read()
print(str(output, 'utf8'))

最后,我们读取并打印来自远程主机的输出。

$ ./exec_cmd.py
Linux

在第二个示例中,我们列出当前工作目录的内容。

list_dir.py
#!/usr/bin/python

import paramiko

hostname = 'example.com'
port = 22

username = 'user7'
password = 'passwd'

cmd = 'ls -l'

with paramiko.SSHClient() as client:

    client.load_system_host_keys()
    client.connect(hostname, port, username, password)

    (stdin, stdout, stderr) = client.exec_command(cmd)

    output = stdout.readlines()

    for line in output:
        print(line.rstrip())

要列出目录的内容,我们使用 ls -l 命令。

output = stdout.readlines()

for line in output:
    print(line.rstrip())

我们使用 readlines 将输出读取到行列表中。我们遍历列表并打印每一行。

Python paramiko 下载文件

在以下示例中,我们通过 SSH 下载文件。

download.py
#!/usr/bin/python

import paramiko

hostname = 'example.com'
port = 22

username = 'user7'
password = 'passwd'

remote_path = f'/home/{username}/data.txt'
output_file = 'data.txt'

with paramiko.SSHClient() as client:
    
    client.load_system_host_keys()
    client.connect(hostname, port, username, password)

    sftp_client = client.open_sftp()
    sftp_client.get(remote_path, output_file)

该示例下载位于用户主目录中的 data.txt 文件。

sftp_client = client.open_sftp()

SFTP 客户端使用 open_sftp 函数创建。

sftp_client.get(remote_path, output_file)

我们使用 get 函数下载文件。

Python paramiko SFTP 列出目录

下一个示例使用 SFTP 列出目录的内容。

list_dir.py
#!/usr/bin/python

import paramiko

hostname = 'example.com'
port = 22

username = 'user7'
password = 'passwd'

with paramiko.SSHClient() as client:
    
    client.load_system_host_keys()
    client.connect(hostname, port, username, password)

    sftp_client = client.open_sftp()
    sftp_client.chdir('tmp')
    contents = sftp_client.listdir()

    for line in contents:
        print(line)

我们使用 chdir 更改到目标目录,并使用 listdir 列出内容。

$ ./list_dir.py 
memo.txt
todo2.txt
notes.txt
test.py
pycp.py
todo.txt
docs

来源

Python paramiko 文档

在本文中,我们利用 paramiko 模块在 Python 中使用 SSH。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程