在本文中,我们介绍了用于与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教程。