Python编程:paramiko模块远程登录

简介: Python编程:paramiko模块远程登录

SSH:安全外壳协议 SSH: Secure Shell Protocol

安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。


说明:以下代码使用windows访问linux(centos)


安装第三方库

pip install paramiko

1. SSHClient方式

1.1 基于用户名和密码

import paramiko
# 建立一个sshclient对象
ssh = paramiko.SSHClient()
# 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 调用connect方法连接服务器
ssh.connect(hostname="hostaddress", port=22, username="root", password="password")
# 执行命令 加入参数 get_pty=True 可执行多条指令(分号;隔开)
stdin, stdout, stderr = ssh.exec_command("df")
# 结果放到stdout中,如果有错误将放到stderr中
stdout = stdout.read().decode("utf-8")
stderr = stderr.read().decode("utf-8")
print(stdout)
print(stderr)
# 关闭连接
ssh.close()

1.2 基于公钥密钥连接

import paramiko
# 导入文件中的私钥
private_key = paramiko.RSAKey.from_private_key_file("private_key.txt")
# 建立一个sshclient对象
ssh = paramiko.SSHClient()
# 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 调用connect方法连接服务器
ssh.connect(hostname="hostaddress", port=22, username="root", pkey=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command("df")
# 结果放到stdout中,如果有错误将放到stderr中
res_out = stdout.read().decode("utf-8")
res_err = stderr.read().decode("utf-8")
result = res_out if res_out else res_err
print(result)
# 关闭连接
ssh.close()

2. SFTPClient方式

2.1 基于用户名密码上传下载文件

import paramiko
transport = paramiko.Transport(("hostaddress", 22))
transport.connect(username="root", password="password")
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传服务器
sftp.put("登鹳雀楼", "登鹳雀楼")
# 从服务器下载
sftp.get("登鹳雀楼", "1.txt")
transport.close()
print("ok")

2.2 基于公钥密钥上传下载文件

import paramiko
# 导入文件中的私钥
private_key = paramiko.RSAKey.from_private_key_file("private_key.txt")
transport = paramiko.Transport(("hostaddress", 22))
transport.connect(username="root", pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传服务器
sftp.put("登鹳雀楼", "登鹳雀楼")
# 从服务器下载
sftp.get("登鹳雀楼", "2.txt")
transport.close()
print("ok")

关于RSA非对称加密

A 电脑 --登陆–> B 电脑

A: private key 私钥

B: public key 公钥


以root用户为例:


linux 生成公钥私钥对 (密码均为空):ssh-keygen

进入目录:cd ~/.ssh

拷贝一份公钥(推荐,不要复制粘贴,有坑):cat id_dsa.pub >> authorized_keys

修改权限:chmod 600 authorized_keys


421

rwx rwx rwx

属主 属组 其他


将私钥复制出来拷贝到客户端,保存为private_key.txt (名字可以随意取)


参考文章:


《使用ssh公钥实现免密码登录》

《python模块之 paramiko》

paramiko SSHClient调用sudo权限和执行多条指令的方法


相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
385 7
|
2月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
273 0
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
319 102
|
3月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
345 104
|
3月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
276 103
|
2月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
219 3
|
2月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
483 3
|
2月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
403 4
|
2月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
300 3
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
312 0

推荐镜像

更多