Python建立ssh连接|paramiko实践

简介: Python建立ssh连接|paramiko实践

之前写了一篇Python调用系统命令的六种方法

paramiko是python的第三方库,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,不仅可以远程执行shell命令,还可以实现服务器文件的上传、下载。相当于一个Python版本的xshell和xftp工具。

安装

pip install paramiko

项目地址: https://github.com/paramiko/paramiko

官方文档: http://docs.paramiko.org/

paramiko主要包含两个类:SSHClient、SFTPClient

SSHClient是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)等,通常用于执行远程命令。

SFTPClient是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。

SSHClient类的使用

SSHClient类的主要方法:

1.connect方法,实现远程ssh连接并校验

connect()
常用参数:
hostname 连接的目标主机
port=SSH_PORT 指定端口
username=None 验证的用户名
password=None 验证的用户密码
pkey=None 私钥方式用于身份验证
key_filename=None 一个文件名或文件列表,指定私钥文件
timeout=None 可选的tcp连接超时时间
allow_agent=True, 是否允许连接到ssh代理,默认为True 允许
look_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许
compress=False, 是否打开压缩

2.exec_command方法,执行远程命令的方法

exec_command(command)
参数:
Command str :命令串
# 执行多个命令,可使用以下方法:
ssh.exec_command('cd /home;ls -l')

3.set_missing_host_key_policy

连接主机没有本地主机秘钥或者HostKeys对象时策略,目前支持三种:

  • AutoAddPolicy:自动添加主机名以及主机秘钥
  • RejectPolicy(默认):自动拒绝未知的主机名和秘钥
  • WarningPolicy:用于记录一个未知主机秘钥的Python警告
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

使用实例

1.基于用户名和密码的 sshclient 方式登录

# 创建SSH对象
ssh = paramiko.SSHClient()

# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接服务器
ssh.connect('192.168.1.120',22,'root','123456')

# 执行命令
stdin, stdout, stderr = ssh.exec_command('date')

# 获取命令结果
res, err = stdout.read(), stderr.read()
result = res if res else err
print(result.decode('utf-8'))

# 关闭连接
ssh.close()

2.基于用户名和密码的 transport 方式登录

import paramiko

# 实例化一个transport对象
transport = paramiko.Transport(('192.168.1.120', 22))

# 建立连接
transport.connect(username='root', password='123456')

# 将sshclient的对象的transport指定为以上的transport
ssh = paramiko.SSHClient()
ssh._transport = transport

# 执行命令,和传统方法一样
stdin, stdout, stderr = ssh.exec_command('date')
print (stdout.read().decode())

# 关闭连接
transport.close()

3.基于密钥连接方式登录

import paramiko

# 配置私人密钥文件位置
private = paramiko.RSAKey.from_private_key_file('/Users/ch/.ssh/id_rsa')
#实例化SSHClient
client = paramiko.SSHClient()
#自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#连接SSH服务端,以用户名和密码进行认证
client.connect(hostname='192.168.1.1',port=22,username='root',pkey=private)

SFTPClient类的使用

常用方法

1、from_transport方法,创建一个已经连通的sftp客户端通道

2、put方法

put(self,localpath,remotepath) #将本地文件上传到服务器 
Localpath  str : 上传文件本地源
Remotepath str : 远程路径

3、get方法

get(remotepath, localpath, callback``=``None``) #从服务器下载文件到本地

4、其他方法

mkdir 创建目录 sftp.mkdr(‘/home/user’,0755)
remove 删除主机端指定目录 sftp.remove(‘/home/user’)
rename 从命名服务端的文件或者目录 sftp.rename(“/home/test.sh”,”/home/newtest.sh”)
listdir  获取远程SFTP服务器端指定的目录列表,返回list形式 sftp.listdir(“/home”)
stat 获取远程主机指定文件信息 sftp.stat(“/home/test.sh”)

使用实例

import paramiko

transport = paramiko.Transport(('192.168.1.120',22))
transport.connect(username='root',password='123456')

sftp = paramiko.SFTPClient.from_transport(transport)

# 将localfile.txt 上传至服务器 /home/remotefile.txt

sftp.put('D:\localfile.txt', '/home/remotefile.txt')

# 将/home/testa.txt 下载到本地 D:\helloword.txt

sftp.get('/home/testa.txt', 'D:\helloword.txt')
transport.close()

可以根据需要,将常用的功能封装,比如实现一个类似xshell工具的功能,登录以后可以输入命令回车后就返回结果,具体实现逻辑如下:

import paramiko
import os

import sys

# 建立一个socket
trans = paramiko.Transport(('192.168.1.120', 22))

# 启动一个客户端
trans.start_client()

# 使用用户名和密码登录
trans.auth_password(username='super', password='super')

# 打开一个通道
channel = trans.open_session()

# 获取终端
channel.get_pty()

# 激活终端,这样就可以登录到终端了,就和我们用类似于xshell登录系统一样
channel.invoke_shell()

# 下面就可以执行你所有的操作


# 关闭通道
channel.close()

# 关闭链接
trans.close()
目录
相关文章
|
9天前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
100 47
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
2月前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
90 3
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
1月前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
79 15
|
1月前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
44 7
|
1月前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
1月前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
49 5
|
2月前
|
机器学习/深度学习 人工智能 数据可视化
使用Python进行数据可视化:探索与实践
在数字时代的浪潮中,数据可视化成为了沟通复杂信息和洞察数据背后故事的重要工具。本文将引导读者通过Python这一强大的编程语言,利用其丰富的库函数,轻松入门并掌握数据可视化的基础技能。我们将从简单的图表创建开始,逐步深入到交互式图表的制作,最终实现复杂数据的动态呈现。无论你是数据分析新手,还是希望提升报告吸引力的专业人士,这篇文章都将是你的理想指南。
65 9
|
2月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
2月前
|
设计模式 缓存 开发者
Python中的装饰器:从入门到实践####
本文深入探讨了Python中强大的元编程工具——装饰器,它能够以简洁优雅的方式扩展函数或方法的功能。通过具体实例和逐步解析,文章不仅介绍了装饰器的基本原理、常见用法及高级应用,还揭示了其背后的设计理念与实现机制,旨在帮助读者从理论到实战全面掌握这一技术,提升代码的可读性、可维护性和复用性。 ####