Python使用Paramiko实现SSH远程命令执行与SFTP文件传输

Alice
Alice
发布时间:2026-10-11 | 3人浏览过
原创

本文介绍如何利用Python的Paramiko库实现SSH远程命令执行和SFTP文件传输。通过实例代码演示了基于密码和密钥的两种连接方式,涵盖命令执行结果获取、文件上传下载操作,以及SSH免密登录的配置方法,帮助开发者快速掌握远程服务器自动化管理技能。

环境准备与模块安装

在Python中实现SSH和SFTP功能,主要依赖第三方库 paramiko。该模块并非Python标准库的一部分,需要通过包管理工具进行安装。在PyCharm等集成开发环境中,可以直接在设置界面搜索并下载 paramiko 模块;在命令行环境下,通常使用 pip install paramiko 进行安装。

基于密码的SSH远程命令执行

实现SSH远程连接并执行命令,核心是创建 SSHClient 对象。由于远程主机的公钥可能不在本地 known_hosts 文件中,需要设置缺失主机密钥策略为自动添加,以避免首次连接时的交互确认。

具体操作步骤如下:

  1. 导入 paramiko 模块。
  2. 创建 SSHClient 实例。
  3. 调用 set_missing_host_key_policy(paramiko.AutoAddPolicy()) 允许自动添加主机密钥。
  4. 使用 connect() 方法指定主机名、端口、用户名和密码进行连接。
  5. 通过 exec_command() 执行远程命令。
  6. 分别读取标准输出(stdout.read())和标准错误(stderr.read()),优先返回有效结果。
  7. 操作完成后调用 close() 关闭连接。
import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#第一次登录的认证信息
# 连接服务器
ssh.connect(hostname='192.168.158.131', port=22, username='root', password='hadoop')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls /')
# 获取命令结果
res,err = stdout.read(),stderr.read()
result = res if res else err
print(result.decode())
# 关闭连接
ssh.close()

基于SFTP的文件传输操作

SFTP(SSH File Transfer Protocol)用于在SSH连接上进行安全的文件传输。通过 paramiko.Transport 建立底层连接,并从中派生出 SFTPClient 对象,可以实现文件的上传和下载。

关键操作包括:

  • 上传文件:使用 sftp.put(local_path, remote_path),将本地文件复制到远程服务器指定目录。
  • 下载文件:使用 sftp.get(remote_path, local_path),将远程文件下载到本地指定路径。
  • 关闭连接:操作结束后,必须调用 transport.close() 释放资源。
import paramiko
transport = paramiko.Transport(('192.168.158.131', 22))
transport.connect(username='root', password='hadoop')
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('fromlinux.txt', '/tmp/test_from_win')
# 将remove_path 下载到本地 local_path
# sftp.get('/root/oldgirl.txt', 'fromlinux.txt')

transport.close()

基于密钥认证的SSH连接

为了提高安全性并实现免密登录,可以使用SSH密钥对进行认证。这需要先在服务器端生成密钥对,并将公钥添加到 ~/.ssh/authorized_keys 文件中,同时将私钥拷贝到本地Windows主机环境目录下。

配置步骤如下:

  1. 使用 ssh-keygen 生成一对密钥。
  2. 将公钥内容追加到远程服务器的 ~/.ssh/authorized_keys 文件中。
  3. 在Python代码中,使用 paramiko.RSAKey.from_private_key_file() 加载本地私钥文件。
  4. 在 connect() 方法中,通过 pkey 参数传入加载的私钥对象,替代密码认证。
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('id_rsa31.txt')#要将私钥放在这里
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.0.0.41', port=22, username='fang', pkey=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df;ifconfig')
result = stdout.read()
print(result.decode())
stdin, stdout2, stderr = ssh.exec_command('ifconfig')
# 获取命令结果
result2 = stdout2.read()
print(result2.decode())
# 关闭连接
ssh.close()

服务器端配置注意事项

若需允许远程主机连接或修改默认端口,需检查并修改服务器端的 /etc/ssh/sshd_config 配置文件。确保配置中允许远程连接,并在修改默认端口后,客户端连接时需指定新的端口号。此外,修改配置后可能需要重启SSH服务以生效。

总结

通过 paramiko 库,Python可以灵活地实现SSH远程命令执行和SFTP文件传输。无论是基于密码的简单连接,还是基于密钥的安全认证,都能满足日常运维和自动化脚本的需求。掌握这些基础操作,有助于提升远程服务器管理的效率。

以上就是Python实现SSH及SFTP功能的详细内容,更多关于Python远程运维、Paramiko库使用的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表