简介
使用开源的Paramiko,我们就可以用Python代码中通过SSH协议对远程服务器执行操作,不需要手敲ssh命令,从而实现自动化运维。
ssh是一个协议,OpenSSH是其中一个开源实现,paramiko库,实现了SSHv2协议(底层使用cryptography)。
项目文档:点我跳转
扩展:ssh协议,OpenSSH
上手
1、安装
pip install paramiko
2、导入模块
import paramiko
3、使用
def initSshClinet(): ''' 初始化,SSH连接账号密码登录服务器 :return: sshClinet ''' ip = ""#服务器ip地址 sshClinet = paramiko.SSHClient() sshClinet.set_missing_host_key_policy(paramiko.AutoAddPolicy()) sshClinet.connect(ip, 22, userName, pw, timeout=360) return sshClinet
def exeCommond(commond): ''' 执行shell命令 ''' stdin, stdout, stderr = sshClient.exec_command(command) outStr = stdout.readlines() print("\n".join(outStr))
def sftpUploadFile(localPath, remotePath): #获取SFTP实例 sftp = sshClinet.open_sftp() #执行上传动作 sftp.put(localPath, remotePath)
def sftpDownloadFile(localPath, remotePath): #获取SFTP实例 sftp = sshClinet.open_sftp() #执行下载动作 sftp.get(localPath, remotePath)
末尾记得要关闭连接
sshClient.close()
也可以使用私钥登录:
# 配置私人密钥文件位置 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='10.0.0.1',port=22,username='root',pkey=private)
学习
paramiko包含两个核心组件:SSHClient和SFTPClient。
名词 | 解释 |
---|---|
Channel | 是一种类Socket,一种安全的SSH传输通道 |
Transport | 是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel |
Session | 是client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话 |
SSHClient常用的方法介绍
connect() :实现远程服务器的连接与认证,对于该方法只有hostname是必传参数。
参数 | 说明 |
---|---|
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 | 是否打开压缩 |
set_missing_host_key_policy() :设置远程服务器没有在know_hosts文件中记录时的应对策略。传入MissingHostKeyPolicy的子类,目前支持三种策略:
设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种:
MissingHostKeyPolicy的子类 | 说明 |
---|---|
AutoAddPolicy | 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认 |
WarningPolicy | 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接 |
RejectPolicy | 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项 |
exec_command() :在远程服务器执行Linux命令的方法。
open_sftp() :在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象。
SFTPClient常用方法介绍
from_transport(cls,t) :创建一个已连通的SFTP客户端通道
put(localpath, remotepath, callback=None, confirm=True) :将本地文件上传到服务器 参数confirm:是否调用stat()方法检查文件状态,返回ls -l的结果
get(remotepath, localpath, callback=None) :从服务器下载文件到本地
mkdir() :在服务器上创建目录
remove() : 在服务器上删除目录
rename() :在服务器上重命名目录
stat() :查看服务器文件状态
listdir() :列出服务器目录下的文件
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍浅谈python之新式类,包括了浅谈python之新式类的使用技巧和注意事项,需要的朋友参考一下 前言 本文中代码运行的python版本一律采取2.7.13 科普: 经典类:classic class 新式类:new-style class python2.2 之前并没有新式类 python2.2-2.7 新式类与经典类并存, 默认使用经典类, 除非显式继承object python
本文向大家介绍Python自动化运维之IP地址处理模块详解,包括了Python自动化运维之IP地址处理模块详解的使用技巧和注意事项,需要的朋友参考一下 实用的IP地址处理模块IPy 在IP地址规划中,涉及到计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等 别担心,Ipy模块拯救你。Ipy模块可以很好的辅助我们高效的完成IP的规划工作。 功能:辅助我们高效的完成IP的规划工作 安
本文向大家介绍浅谈Webpack自动化构建实践指南,包括了浅谈Webpack自动化构建实践指南的使用技巧和注意事项,需要的朋友参考一下 由于现在的博客是使用wordpress搭建,自己得经常修改过一些代码,但是修改第三方源码真的比较痛苦,于是决定计划开始使用React + Node.js / Python开发新博客项目,最终替换当前博客代码,方便以后博客的维护和更新,也能实现自我开发技术,架构设计
本文向大家介绍浅谈mybatis如何半自动化解耦(推荐),包括了浅谈mybatis如何半自动化解耦(推荐)的使用技巧和注意事项,需要的朋友参考一下 在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis。 通过研究mybatis源码,可将mybatis的大致架构总结为下图:
本文向大家介绍浅谈React组件之性能优化,包括了浅谈React组件之性能优化的使用技巧和注意事项,需要的朋友参考一下 高德纳: "我们应该忘记忽略很小的性能优化,可以说97%的情况下,过早的优化是万恶之源,而我们应该关心对性能影响最关键的另外3%的代码。" 不要将性能优化的精力浪费在对整体性能提高不大的代码上,而对性能有关键影响的部分,优化并不嫌早。因为,对性能影响最关键的部分,往往涉及解决方案
本文向大家介绍浅谈springboot自动配置原理,包括了浅谈springboot自动配置原理的使用技巧和注意事项,需要的朋友参考一下 从main函数说起 一切的开始要从SpringbootApplication注解说起。 其中最重要的就是EnableAutoConfiguration注解,开启自动配置。 通过Import注解导入AutoConfigurationImportSelector。在这