Python编程:paramiko模块远程登录
2023-09-14 09:07:12 时间
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 (名字可以随意取)
参考文章:
相关文章
- 【Python包】SQLite3使用说明(内置模块)
- python中os模块获取路径的几种方式
- Python asyncio编程之异步与非异步模块混合异步实现
- Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码
- 100天精通Python(进阶篇)——第41天:自动化操作读写Excel(xlrd和xlwt模块参数说明+代码实战)
- Python编程:socket模块
- Python编程:itertools模块
- Python编程:orm之sqlalchemy模块
- Python编程:playhouse模块转peewee的model对象为字典dict
- Python编程:managers模块分布式进程
- Python编程:logging模块的简单使用
- Python编程:sqlalchemy模块对msyql的增删改查
- Python编程:dateutil模块实现月份相加减
- Python编程:time模块实现函数执行时间计时器
- Python编程:MySQLdb模块更新数据库获取影响行数
- Python编程:trio模块异步/等待本地I/O库
- Python编程:abc模块实现抽象类
- Python编程:heapq模块堆排序
- python在windows通过安装模块错误
- python导入模块
- python基础===python os.path模块