python 之 Paramiko学习

paramiko模块,基于SSH用于连接远程服务器并执行相关操作。

一、安装

pip3 install paramiko

二、使用

SSHClient

用于连接远程服务器并执行基本命令

基于用户名密码连接:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: DBQ(Du Baoqiang)

import paramiko

#创建ssh对象

ssh = paramiko.SSHClient()

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

#连接服务器
ssh.connect(hostname=‘192.168.1.103‘,port=22,username=‘root‘,password=‘123456‘)

#执行命令
stdin,stdout,stderr = ssh.exec_command(‘ls /tmp/‘)

#获取执行结果
result = stdout.read()

print(result.decode()) #返回的是bytes

#关闭连接
ssh.close()

复制代码

基于公钥密钥连接:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# auth : pangguoping

import paramiko

private_key = paramiko.RSAKey.from_private_key_file(‘/Users/daniel/.ssh/id_rsa‘)

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=‘192.168.1.103‘, port=22, username=‘root‘, pkey=private_key)

# 执行命令
stdin, stdout, stderr = ssh.exec_command(‘df‘)
# 获取命令结果
result = stdout.read()
print(result.decode())
# 关闭连接
ssh.close()

SFTPClient

用于连接远程服务器并执行上传下载

基于用户名密码 上传/下载

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import paramiko

transport = paramiko.Transport((‘192.168.1.103‘,22))
transport.connect(username=‘root‘,password=‘123456‘)

sftp = paramiko.SFTPClient.from_transport(transport)

#上传本地文件/Users/daniel/test/zhoulibo.mp4 上传到服务器的 /tmp/test.mp4
sftp.put(‘/Users/daniel/test/test.mp4‘,‘/tmp/test.mp4‘)

#将远端/tmp/zhoulibo.mp4 下载到 本地 /Users/daniel/test.mp4
sftp.get(‘/tmp/zhoulibo.mp4‘,‘/Users/daniel/test.mp4‘)

transport.close()

基于公钥/密钥的上传/下载:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import paramiko

private_key = paramiko.RSAKey.from_private_key_file(‘/Users/daniel/.ssh/id_rsa‘)

transport = paramiko.Transport((‘192.168.1.103‘,22))
transport.connect(username=‘root‘,pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

#上传本地文件/Users/daniel/test/tt.mp4 上传到服务器的 /tmp/tt.mp4
sftp.put(‘/Users/daniel/test/tt.mp4‘,‘/tmp/tt.mp4‘)

#将远端/tmp/tt.mp4 下载到 本地 /Users/daniel/tt.mp4
sftp.get(‘/tmp/tt.mp4‘,‘/Users/daniel/tt.mp4‘)

transport.close()

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import paramiko,uuid

class SSHConnection:

    def __init__(self,host=‘192.168.1.103‘,port=22,username=‘root‘,pwd=‘123456‘):
        self.host = host
        self.port = port
        self.username = username
        self.pwd = pwd
        self.__k = None

    def create_file(self):
        file_name = str(uuid.uuid4())   #生成一个‘46cad739-5937-4312-9156-00753b272581‘的文件名 uuid并转换成str
        with open(file_name,‘w‘) as f:  #打开文件,往里面写一个sb
            f.write(‘sb‘)
        return file_name

    def run(self):
        ‘‘‘
        主方法
        :return:
        ‘‘‘
        self.connect()
        self.upload(‘/tmp/test.py‘)   #调用upload方法,上传到服务器的/tmp/test.py
        self.rename(‘/tmp/test.py‘,‘/tmp/sb.py‘)  #改名为sb.py
        self.close()

    def connect(self):
        ‘‘‘
        建立连接
        :return:
        ‘‘‘
        transport = paramiko.Transport((self.host,self.port))
        transport.connect(username=self.username,password=self.pwd)
        self.__transport = transport

    def close(self):
        ‘‘‘
        关闭连接
        :return:
        ‘‘‘
        self.__transport.close()

    def upload(self,target_path):
        ‘‘‘
        连接,上传
        :param target_path:
        :return:
        ‘‘‘
        file_name = self.create_file()
        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        #上传本地文件 到服务器的 test.py
        sftp.put(file_name, target_path)

    def rename(self, old_path, new_path):
        ‘‘‘
        改名, 把/tmp/test.py 改名为 sb.py
        :param old_path:
        :param new_path:
        :return:
        ‘‘‘
        ssh = paramiko.SSHClient()
        ssh._transport = self.__transport
        #执行命令
        cmd = "mv %s %s" %(old_path,new_path)
        stdin,stdout,stderr = ssh.exec_command(cmd)
        res = stdout.read()

    def cmd(self,command):
        ‘‘‘
        可以执行其他命令
        :param command:
        :return:
        ‘‘‘
        self.connect()
        ssh = paramiko.SSHClient()
        ssh._transport = self.__transport
        #执行命令
        stdin, stdout, stderr = ssh.exec_command(command)
        res = stdout.read()
        self.close()
        return res

ha = SSHConnection()

ha.run()
res = ha.cmd(‘ls‘)
print(res.decode())

demo

时间: 2024-11-06 09:55:25

python 之 Paramiko学习的相关文章

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 应用领域及学习重点

笔者认为不管学习什么编程语言,首先要知道:学完之后在未来能做些什么? 本文将浅谈 Python 的应用领域及其在对应领域的学习重点.也仅是介绍了 Python 应用领域的"冰山一角",有兴趣的读者可以再自行搜索资料进行了解. Python 的应用领域是极其广泛的,几乎所有大中型互联网企业都在使用 Python 完成各种各样的任务.想详细了解,请参见下文,如有不妥之处,敬请留言指正,笔者必会虚心采纳. 一 Python 在世界上的知名应用 以下内容,将列举出 Python 在大家所熟知的

python之paramiko模块

python paramiko模块 1.安装 1225 ./configure #在解压后的python2.7.9的目录下 1226 make 1227 make install 1228 cd /usr/local/ 1229 ls 1230 cd bin 1231 ls 1232 ./python 1233 python 1234 cd /usr/bin 1235 ls 1236 ll python* 1237 mv ./python ./python26 1238 ln -s /usr/l

【python标准库学习】thread,threading(二)多线程同步

继上一篇介绍了python的多线程和基本用法.也说到了python中多线程中的同步锁,这篇就来看看python中的多线程同步问题. 有时候很多个线程同时对一个资源进行修改,这个时候就容易发生错误,看看这个最简单的程序: import thread, time count = 0 def addCount(): global count for i in range(100000): count += 1 for i in range(10): thread.start_new_thread(ad

【python标准库学习】thread,threading(一)多线程的介绍和使用

在单个程序中我们经常用多线程来处理不同的工作,尤其是有的工作需要等,那么我们会新建一个线程去等然后执行某些操作,当做完事后线程退出被回收.当一个程序运行时,就会有一个进程被系统所创建,同时也会有一个线程运行,这个线程就是主线程main,在主线程中所创建的新的线程都是子线程,子线程通常都是做一些辅助的事.python中提供了thread和threading两个模块来支持多线程. python中使用线程有两种方式,第一种是用thread模块的start_new_thread函数,另一种是用threa

python第三方库学习之xlrd读取Excel文件

因为经常会涉及到从Excel表中导数据,所以就学习了python的xlrd来读取excel中的数据. 1.xlrd的安装 xlrd是python的第三方库,所以是需要自己安装的,可以在python的官网http://pypi.python.org/pypi/xlrd下载该模块来安装,也可以通过其他手段,比如easy_install或者pip啥的,我已经安装好pip所以就用最懒的方式来安装了pip install xlrd来安装. 2.分析excel文件的层级对象 要读取excel的数据,就要了解

【python】--paramiko 连接 AWS 的机器

在使用AWS(亚马逊)的云机器, AWS 管理面板中生成密钥. 使用python的Paramiko 连接服务器 paramiko k = paramiko.RSAKey.from_private_key_file() c = paramiko.SSHClient() c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) c.connect( = = = k ) command =stdin stdoutstderr = c.exec_co

《灰帽Python-黑客和逆向工程师的Python编程》学习记录

ctypes是Python语言的一个外部库,提供和C语言兼容的数据类型,可以很方便的调用C DLL中的函数. 操作环境:CentOS6.5 Python版本:2.66 ctypes是强大的,强大到本书以后介绍的几乎所有库都要基于此.使用它我们就能够调用动态链接库中函数,同时创建各种复杂的C数据类型和底层操作函数.毫无疑问,ctypes就是本书的基础. 第一章 搭建开发环境 1.3.2 使用动态链接库 from ctypes import * libc = CDLL("libc.so.6"

python的paramiko模块

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