开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python 使用 paramiko

在本文中,我们介绍了用于与SSH协议一起工作的Pythonparamiko模块。

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是SSHv2协议的Python实现。它同时提供客户端和服务器功能。它是流行的Fabrictool的基础库。

$ pip install paramiko

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

Pythonparamiko命令执行

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

#!/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将输出读入行列表。我们遍历列表并打印每一行。

Pythonparamiko下载文件

在下面的示例中,我们通过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函数下载文件。

PythonparamikoSFTP列表目录

下一个示例使用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教程。

未经允许不得转载:我爱分享网 » Python 使用 paramiko

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏