# 用 Paramiko,轻松掌控远程服务器
文章目录
- 用 Paramiko,轻松掌控远程服务器
- 一、背景
- 二、什么是 Paramiko
- 三、安装 Paramiko
- 四、库函数使用方法
- 五、使用场景
- 六、常见问题及解决方案
- 七、总结

用 Paramiko,轻松掌控远程服务器
一、背景
在日常的开发和运维工作中,我们常常需要与远程服务器进行交互,比如执行命令、上传下载文件等。传统的手动操作不仅效率低下,还容易出错。而 Paramiko
正是为了解决这些问题而生。它是一个强大的 Python 第三方库,专门用于实现 SSHv2 协议,能够让我们通过 Python
脚本轻松地对远程服务器进行各种操作。接下来,就让我们深入了解这个强大的工具。
二、什么是 Paramiko
Paramiko 是一个基于 Python 实现的 SSHv2 协议库,它提供了客户端和服务器功能。它实现了完整的 SSHv2
协议,包括密钥认证、消息加密和会话管理,能够确保通信的安全性。通过 Paramiko,我们可以方便地进行 SSH 连接、执行远程命令、上传下载文件等操作。
三、安装 Paramiko
由于 Paramiko 是一个第三方库,我们需要通过命令行进行安装。安装命令如下:
bash复制
pip install paramiko
四、库函数使用方法
- 创建 SSH 客户端
Python复制
import paramiko
ssh = paramiko.SSHClient()
这行代码创建了一个 SSH 客户端实例,用于后续的连接和操作。
- 设置主机密钥策略
Python复制
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
这行代码设置了主机密钥策略,AutoAddPolicy
会自动将远程主机的密钥添加到本地的 known_hosts
文件中,避免手动确认主机密钥。
- 连接远程服务器
Python复制
ssh.connect('your_server_ip', port=22, username='your_username', password='your_password')
这行代码用于连接远程服务器,需要指定服务器的 IP 地址、端口号、用户名和密码。
- 执行远程命令
Python复制
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
这行代码执行了一个远程命令(ls -l
),并通过 stdout.read().decode()
获取命令的输出结果。
- 关闭连接
Python复制
ssh.close()
这行代码关闭了与远程服务器的连接,释放资源。
五、使用场景
- 执行远程命令
Python复制
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', password='your_password')
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
ssh.close()
在这个场景中,我们通过 Paramiko 连接到远程服务器并执行了一个简单的 ls -l
命令,然后打印出命令的输出结果。
- 上传文件
Python复制
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', password='your_password')
sftp = ssh.open_sftp()
sftp.put('local_file.txt', 'remote_file.txt')
sftp.close()
ssh.close()
在这个场景中,我们使用 Paramiko 的 SFTP 功能将本地文件 local_file.txt
上传到远程服务器的
remote_file.txt
。
- 下载文件
Python复制
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', password='your_password')
sftp = ssh.open_sftp()
sftp.get('remote_file.txt', 'local_file.txt')
sftp.close()
ssh.close()
在这个场景中,我们使用 Paramiko 的 SFTP 功能从远程服务器下载文件 remote_file.txt
到本地的
local_file.txt
。
- 使用密钥登录
Python复制
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('path_to_your_private_key')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', pkey=private_key)
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
ssh.close()
在这个场景中,我们使用私钥文件进行身份验证,而不是传统的用户名和密码。
- 批量执行命令
Python复制
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', password='your_password')
commands = ['ls -l', 'date', 'whoami']
for command in commands:
stdin, stdout, stderr = ssh.exec_command(command)
print(stdout.read().decode())
ssh.close()
在这个场景中,我们通过 Paramiko 连接到远程服务器后,依次执行了多个命令,并打印出每个命令的输出结果。
六、常见问题及解决方案
- 问题:连接时提示“Authentication failed”
* **错误信息**
Authentication failed.
* **原因** :用户名或密码错误,或者私钥文件路径错误。
* **解决方案**
* 确保用户名和密码正确无误。
* 如果使用私钥登录,检查私钥文件路径是否正确,私钥文件的权限是否正确(私钥文件的权限应为 600)。
- 问题:执行命令时没有输出
* **错误信息**
stdout.read() 返回空值
* **原因** :可能是命令执行失败,或者命令没有输出。
* **解决方案**
* 检查命令是否正确执行,可以通过 `stderr.read()` 检查是否有错误信息。
* 确保命令有输出,例如执行 `ls -l` 应该有目录列表的输出。
- 问题:连接时提示“SSHException: No host key for host”
* **错误信息**
SSHException: No host key for host
* **原因** :没有将远程主机的密钥添加到本地的 `known_hosts` 文件中。
* **解决方案**
* 在连接之前,使用 `ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())` 自动添加主机密钥。
七、总结
Paramiko 是一个功能强大的 Python 第三方库,它为我们提供了便捷的 SSH
连接和操作功能。通过它可以轻松地执行远程命令、上传下载文件,甚至使用密钥进行身份验证。虽然在使用过程中可能会遇到一些问题,但只要掌握正确的方法,就能轻松解决。总之,Paramiko
是一个值得我们深入学习和使用的工具,它将大大提高我们对远程服务器的操作效率。
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!