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 (名字可以随意取)


参考文章:

  1. 《使用ssh公钥实现免密码登录》
  2. 《python模块之 paramiko》
  3. paramiko SSHClient调用sudo权限和执行多条指令的方法
相关文章
|
安全 测试技术 数据库
Python编程--sys模块及OS模块简单用例
Python编程--sys模块及OS模块简单用例
416 1
|
JSON 数据格式 Python
Python编程:利用JSON模块编程验证用户
Python编程:利用JSON模块编程验证用户
223 1
|
数据处理 Python
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
441 1
|
人工智能 安全 Java
Python 多线程编程实战:threading 模块的最佳实践
Python 多线程编程实战:threading 模块的最佳实践
672 5
|
安全 调度 Python
什么是Python中的事件驱动编程?如何使用`asyncio`模块实现异步事件处理?
【2月更文挑战第4天】【2月更文挑战第9篇】什么是Python中的事件驱动编程?如何使用`asyncio`模块实现异步事件处理?
570 0
|
存储 网络安全 数据安全/隐私保护
【专栏】Python 网络设备管理中,`ConnectHandler`(Paramiko库)和`telnetlib`模块常用于设备交互。
【4月更文挑战第28天】Python 网络设备管理中,`ConnectHandler`(Paramiko库)和`telnetlib`模块常用于设备交互。`ConnectHandler`简化SSH连接,便于与网络设备交互,而`telnetlib`是Python内置模块,支持Telnet协议的远程登录操作。两者都提供命令执行和响应接收功能。示例代码展示了如何使用它们获取防火墙设备的版本信息,降低了代码复杂度,提高了可读性和维护性。
770 0
|
缓存 分布式计算 自然语言处理
Python语言的函数编程模块
Python语言的函数编程模块
|
并行计算 程序员 API
Python多进程编程:利用multiprocessing模块实现并行计算
Python多进程编程:利用multiprocessing模块实现并行计算
1452 0
|
前端开发 安全 Unix
Python编程手册系列 - 日历、日期、时间相关内建模块详解
Python编程手册系列 - 日历、日期、时间相关内建模块详解
395 0
|
SQL 关系型数据库 MySQL
Python编程:MySQLdb模块对数据库的基本增删改查操作
Python编程:MySQLdb模块对数据库的基本增删改查操作
284 1

推荐镜像

更多