【PYTHON模块】paramiko模块与主机SSH连接

还记得前一节做的socket和socketserver吗?写了很多实现了一个小功能,但是今天的paramiko真让人有种土枪换炮的感觉!

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。

本文只演示paramiko连接linux操作系统。

-----------------------------------------------------

paramiko包里一共有种连接方式(两个类):SSHClient和Transport,每种连接方式都支持口令认证证书认证

paramiko也有一些其它的方法和属性。本文只介绍简单、常用的。

paramiko不是python基本模块,需是基于pycrypto模块,所以需要安装pycrypto,再安装paramiko

pip3 install pycrypto # windows下多半是会报错的,原因是因为需要安装c++,并且设置变量。

pip3 install paramiko    
# 实际上直接安装paramiko,自动安装依赖的包。我使用的pip版本是pip 9.0.3
# 成功的时候会提示安装了下面这些包:pycparser, cffi, pynacl, bcrypt, pyasn1, asn1crypto, cryptography, paramiko

一、SSHClient:用来远程执行命令。

方法/属性名 参数: 说明
connect()
实现SSH的加密连接

hostname
port 
username 
password 
pkey 
timeout 
allow_agent 
look_for_keys 
compress


参数类型:作用

str :主机ip       # 必须参数

int :端口        # 必须参数

str:用户名     # 用户名和pkey密钥连接方式必须存在一个

str :密码

pkey: 秘钥

float: 超时时间      # 可选

boool :当为flase时,禁用连到ssh代理      # 可选

bool : flase时,禁用在~/.ssh中搜索秘钥文件      # 可选

bool : true时打开压缩。      # 可选

exec_command()
远程执行命令,popen的远程版。。。

"command"

bufsize


参数类型:作用

str:远程执行的命令,如果有多个命令需要操作时,需要通过分号进行分割

int:缓冲区的大小,默认-1,无限制

load_system_host_keys()
加载本地公秘钥校验文件,默认为~/.ssh/known_hosts

filename


参数类型:作用

str : 远程主机公钥记录文件,linux系统下默认路径~/.ssh/known_hosts

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


AutoAddPolicy:自动添加主机名以及主机密钥

RejectPolicy(默认):自动拒绝未知的主机名和秘钥

WarningPolicy: 用于记录一个未知主机秘钥的Python警告


示例:

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(.................)

stdin.wirte(str) str 输入str型的字符确认继续。应该类似bat 中的pause

示例一:使用用户名和密码进行SSHClient连接

import paramiko
paramiko.util.log_to_file('/tmp/ssh_log') # 记录连接信息
# 使用用户名密码连接远程
def Myssh():
    cmd = input("要执行的命令->>:").strip()
    return cmd
    
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())    # 在connect前,设置参数,自动添加主机到linux的 host_knows文件里
ssh.connect(hostname = '192.168.1.100', port = 9999, username = 'david',password = 'wonianqing')
#也可以传形参:ssh.connect('192.168.1.100', 9999, 'david','wonianqing')

cmd = Myssh()
stdin,stdout,stderr = ssh.exec_command(cmd)

if stdout.read():
    print (stdout.read())            # stdout和stderr两者只能有一个有数据,stdout正常返回,stderr返回的错误。
else:
    print (stderr.read())

ssh.close()

示例二:使用证书认证进行SSHClient连接。

import paramiko
ssh = paramiko.SSHClient()
ssh.connect("localhost",9999,pkey="")        # 需要在linux下创建个密钥,pkey就是客户机上的私钥地址,服务端地址默认

二、SFTPClient:用来上传下载远程主机的文件

方法/属性名 作用 参数 示例
Transport((主机名,端口号)) 建立远程主机加密码管道对象

主机名:ip或者主机名,str型

端口号:指定端口,int型

sf = paramiko.Transport(("192.168.1.1",22))
connect(username,password) 建立远程连接
username:用户名

password:密码

sf.connect(username = "root",password="areyouok1")
SFTPClient.from_transport(加密管道) 建立一个客户端对象,通过ssh transport操作远程文件 加密管道:之前创建的sf对象 sftp = paramiko.SFTPClient.from_transport(sf)
get(远程文件,本地文件) 从远程下载指定文件存到本地
远程文件名

本地文件名

sftp.get(remotepath,localpath)
put(本地文件,远程文件) 从本地上传指定文件到远程路径
本地文件名

远程文件名

sftp.put(localpath,remotepath)
listdir(远程路径) 列出远程指定路径的文件夹 远程路径名 sftp.listdir("..")
import paramiko
"""SFTPClient"""

sftp_transport_obj = paramiko.Transport(("192.168.1.106", 22))
sftp_transport_obj.connect(username="root",password="a2266351z")
sftp = paramiko.SFTPClient.from_transport(sftp_transport_obj)
# sftp.get()
# sftp.put()
ss=sftp.listdir("..")
print(ss)
print(ss.read())

'''paramiko也可以使用socket对象连接'''

import socket,paramiko

addr = "192.168.1.106" 
port = 22
socket_obj = socket.socket()
socket_obj.connect((addr,port))
sftp_transport_obj = paramiko.Transport(socket_obj)
sftp_obj = paramiko.SFTPClient.from_transport(sftp_transport_obj)

cmd_result = sftp_obj.listdir('..')

print(cmd_result)

sftp_transport_obj.close()

参考资料:

http://python.jobbole.com/87088/

原文地址:http://blog.51cto.com/yishi/2103969

时间: 2024-10-10 18:33:24

【PYTHON模块】paramiko模块与主机SSH连接的相关文章

Python之paramiko模块和SQL连接API

堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.con

使用python的Paramiko模块登陆SSH

paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. python的paramiko模块可以方便的实现ssh登录,并执行命令. 1. paramiko模块安装 1.1安装pycrypto库 下载地址请戳这里:http://download.csdn.net/detail/oatnehc/8825715: pycrypto库的主页在这里:https://www.dlitz.net/software/pycrypto/ pycrypto库

Python学习—paramiko模块实现简单的ssh与sftp

paramiko模块 paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. import paramiko # ssh [email protected] # 创建一个ssh对象 client = paramiko.SSHClient() #如果第一次连接陌生的IP,自动选择yes确认连接 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接

Python中paramiko模块在linux运维中应用

python的paramiko模块可以实现ssh客户端的功能,使用起来也比较简单.但是当服务器非常多的时候,每台服务器上执行完全相同的简单操作,也会花费大量的时间. 下载模块:paramiko.tar.gz使用tar解压后在cd到目录下最后使用rpm安装 rpm -ivh * import paramiko //导入paramiko模块host='192.168.x.xx' //需要远程管理的主机ip ssh=paramiko.SSHClient() //相当于点开xshellssh.set_m

ECS云主机SSH连接提示“Connection reset by peer”的解决办法和解决思路

三周前刚从上家公司换到新的公司,这家公司与上家公司相比对阿里云的云计算环境更加的依赖,使用的ECS实例和其他服务如SLB.RDS.OSS等更多了一个数量级.这篇文章的背景就是为了解决阿里云ECS云主机SSH连接的一个问题,从故障发现到故障排除到最后反思的一个详细过程.文章比较长,图片众多,建议有时间仔细阅读,没时间就阅读文末的"总结和反思"部分即可. 故障发现: 2017-05-23 下午17:00点前同事报告称GitLab所在的服务器访问出现异常.经查发现在公司内无法正常通过SSH连

python的paramiko模块

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台.利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输. paramiko常用的类与方法: 1.SSHClient类 SHClient类是SSH服务会话的高级表示,封装了传输.通道以及SFTPClient的校验.建立方法,通常用于

python的paramiko模块报错解决办法

写了一个Python脚本内容如下: #-*- coding:utf-8 -*- __author__ = 'kai' import paramiko import sys,os host = sys.argv[1] user = 'zk' password = '123' cmd = sys.argv[2] s = paramiko.SSHClient()        #绑定实例 s.load_system_host_keys()       #加载本机HOST主机文件 s.set_missi

python中paramiko模块的使用

paramiko是python一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接1.可以远程操作服务器文件 例如:df:查看磁盘使用情况mkdir:创建目录mv/cp/mkdir/rmdir:对文件或目录进行操作/sbin/service/ xxxservice start/stop/restart:启动.停止.重启某服务netstat -ntl |grep 8080:查看8080端口的使用情况 或者 nc -zv localhost :查看所有端口的使用情况 find /

Python修改paramiko模块开发运维审计保垒机

需求: 1.保垒机有一个公共账号,所有人都是用这个账号登陆保垒机,root用户只能由堡垒机管理员有权限可以登陆 2.公共账号登陆保垒机->选择主机组->选择主机->选择你的普通用户->输入你的后端服务器的密码登陆 3.登陆的后端服务器所操作过的命令要记录到文件 拓扑图: 第三方模块paramiko下载 paramiko-1.10.1.tar.gz http://pan.baidu.com/s/1hrWzg7y paramiko源码包远程演示(未修改源码) 修改parpakio源码