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()
目录
相关文章
|
1月前
|
缓存 算法 测试技术
Python中的装饰器:原理与实践
【2月更文挑战第29天】 在Python编程领域,装饰器是一种强大的工具,它允许我们在不修改原始函数代码的情况下,增加或修改函数的行为。本文将深入探讨Python装饰器的概念、实现原理以及实际应用,帮助读者掌握这一技术并在实际项目中灵活运用。
|
22天前
|
安全 网络安全 数据安全/隐私保护
ansible 建立ssh信任并分发到各个机器
ansible 建立ssh信任并分发到各个机器
19 0
|
1月前
|
数据采集 数据挖掘 调度
异步爬虫实践攻略:利用Python Aiohttp框架实现高效数据抓取
本文介绍了如何使用Python的Aiohttp框架构建异步爬虫,以提升数据抓取效率。异步爬虫利用异步IO和协程技术,在等待响应时执行其他任务,提高效率。Aiohttp是一个高效的异步HTTP客户端/服务器框架,适合构建此类爬虫。文中还展示了如何通过代理访问HTTPS网页的示例代码,并以爬取微信公众号文章为例,说明了实际应用中的步骤。
|
5天前
|
机器学习/深度学习 搜索推荐 Python
Python特征工程面试:从理论到实践
【4月更文挑战第17天】本文探讨了Python在数据科学面试中的特征工程,涵盖基础概念如特征选择和提取,实战技能如缺失值和异常值处理,以及特定场景应用。强调避免过度依赖单一方法,忽视数据分布和相关性,以及保持特征工程的可解释性。提供代码示例展示了处理缺失值、标准化、特征选择和异常值检测的基本操作。建议结合业务理解,灵活运用多种方法并注重模型解释性。
19 9
|
5天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
7天前
|
机器学习/深度学习 数据采集 算法
scikit-learn入门指南:从基础到实践
【4月更文挑战第17天】这篇指南介绍了scikit-learn,一个Python数据分析和机器学习的重要库。内容涵盖安装、数据加载与预处理、模型训练(如KNN分类器)、评估、调参优化及高级应用,如降维和聚类。通过实例展示了scikit-learn在分类任务中的使用,强调其在数据科学中的重要性。要深入了解,可参考官方文档和实践案例。
|
12天前
|
开发者 索引 Python
实践:如何使用python在网页的表格里抓取信息
实践:如何使用python在网页的表格里抓取信息
|
19天前
|
网络协议 安全 Python
python监听连接请求
【4月更文挑战第5天】本教程介绍了网络编程中服务器监听连接请求的关键步骤。首先,理解监听是服务器在特定端口等待客户端连接的基本概念。接着,设置监听涉及创建套接字、绑定地址和端口,以及开始监听。提供了一个Python示例,展示如何使用socket库实现监听。注意点包括异常处理、并发处理和安全性考虑。学习后,读者能掌握基础的监听连接请求代码编写。
|
1月前
|
数据可视化 数据挖掘 Python
Python中的数据可视化工具Matplotlib简介与实践
在本文中,我们将介绍Python中常用的数据可视化工具Matplotlib,包括其基本概念、常用功能以及实际应用。通过学习Matplotlib,读者可以更好地理解和运用数据可视化技术,提升数据分析与展示的能力。
|
1月前
|
运维 安全 网络安全
Python灰帽子网络安全实践
旨在降低网络防范黑客的入门门槛,适合所有中小企业和传统企业。罗列常见的攻击手段和防范方法,让网站管理人员都具备基本的保护能力。Python 编程的简单实现,让网络运维变得更简单。各种黑客工具的理论和原理解剖,让人知其然更知道防范于未来。涉及互联网和局域网,让企业级网管工作更轻松。涵盖Linux&Windows 的知识点。
14 1