Python paramiko
最后修改于 2024 年 1 月 29 日
本文介绍了 Python paramiko 模块,该模块用于操作 SSH 协议。
SSH 是一种网络通信协议,它使两台计算机能够安全地通信和共享数据。术语 SSH 用于网络协议以及实现该协议的实用工具套件。
管理员使用 SSH 工具来安全地管理远程计算机。
默认情况下,SSH 服务器在 TCP 端口 22 上侦听。
OpenSSH
OpenSSH 是 SSH 协议的一个流行的开源实现。
OpenSSH 提供以下工具
- ssh - 用于连接到远程主机的客户端
- sshd - 远程主机上的服务器,它启用远程连接
- ssh-keygen - 为 SSH 生成、管理和转换身份验证密钥
- ssh-agent - 存储用于公钥身份验证的私钥
- ssh-add - 将私钥添加到服务器允许的列表中
- ssh-keyscan - 帮助从主机收集公共 SSH 主机密钥
- sftp - 通过 SSH 提供 SFTP 协议的服务
- scp - 在网络上的主机之间复制文件的客户端
Paramiko
Paramiko 是 SSHv2 协议的 Python 实现。它提供客户端和服务器功能。 它是流行的 Fabric 工具的基础库。
$ pip install paramiko
Paramiko 是一个第三方工具;可以使用 pip
工具安装它。
Python paramiko 命令执行
在第一个示例中,我们在远程主机上执行命令。
#!/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
在第二个示例中,我们列出当前工作目录的内容。
#!/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 下载文件。
#!/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 列出目录的内容。
#!/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
来源
在本文中,我们利用 paramiko 模块在 Python 中使用 SSH。
作者
列出所有 Python 教程。