Python使用Paramiko实现SSH远程命令执行与SFTP文件传输
本文介绍如何利用Python的Paramiko库实现SSH远程命令执行和SFTP文件传输。通过实例代码演示了基于密码和密钥的两种连接方式,涵盖命令执行结果获取、文件上传下载操作,以及SSH免密登录的配置方法,帮助开发者快速掌握远程服务器自动化管理技能。
环境准备与模块安装
在Python中实现SSH和SFTP功能,主要依赖第三方库 paramiko。该模块并非Python标准库的一部分,需要通过包管理工具进行安装。在PyCharm等集成开发环境中,可以直接在设置界面搜索并下载 paramiko 模块;在命令行环境下,通常使用 pip install paramiko 进行安装。
基于密码的SSH远程命令执行
实现SSH远程连接并执行命令,核心是创建 SSHClient 对象。由于远程主机的公钥可能不在本地 known_hosts 文件中,需要设置缺失主机密钥策略为自动添加,以避免首次连接时的交互确认。
具体操作步骤如下:
- 导入
paramiko模块。 - 创建
SSHClient实例。 - 调用
set_missing_host_key_policy(paramiko.AutoAddPolicy())允许自动添加主机密钥。 - 使用
connect()方法指定主机名、端口、用户名和密码进行连接。 - 通过
exec_command()执行远程命令。 - 分别读取标准输出(
stdout.read())和标准错误(stderr.read()),优先返回有效结果。 - 操作完成后调用
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主机环境目录下。
配置步骤如下:
- 使用
ssh-keygen生成一对密钥。 - 将公钥内容追加到远程服务器的
~/.ssh/authorized_keys文件中。 - 在Python代码中,使用
paramiko.RSAKey.from_private_key_file()加载本地私钥文件。 - 在
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库使用的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













