我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python 利用paramiko批量管

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python 利用paramiko批量管

paramiko是基于python实现的ssh2远程安全连接,支持秘钥认证,实现远程命令执行,文件传输,中间ssh代理等功能


安装paramiko

paramiko依赖第三方的crypto,ecdsa,python-devel

yum install -y python-devel

打开https://pypi.org/project/ecdsa/#files 下载

https://files.pythonhosted.org/packages/f9/e5/99ebb176e47f150ac115ffeda5fedb6a3dbb3c00c74a59fd84ddf12f5857/ecdsa-0.13.tar.gz

tar zxf ecdsa-0.13.tar.gz 

cd ecdsa-0.13/

python setup.py install

打开https://pypi.org/project/pycrypto/#files 下载

https://files.pythonhosted.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz

tar zxf  pycrypto-2.6.1.tar.gz

cd pycrypto-2.6.1/

python setup.py install

下载paramiko 

wget https://github.com/paramiko/paramiko/archive/v1.12.2.tar.gz

tar zxf v1.12.2.tar.gz 

cd paramiko-1.12.2/

python setup.py install


paramiko的两个核心组件 SSHClient 和 SFTPClient


远程ssh运行命令示例:

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

import paramiko
hostname='192.168.1.124'
username='root'
password='123456'
paramiko.util.log_to_file('syslogin.log')

ssh=paramiko.SSHClient()
ssh.load_system_host_keys()

ssh.connect(hostname=hostname,username=username,password=password)
stdin,stdout,stderr=ssh.exec_command('free -m')
print stdout.read()
ssh.close()


sftpclient应用示例:

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

import paramiko

username="root"
hostname="192.168.1.124"
password="lkj123456"
port=22
try:
	t=paramiko.Transport((hostname,port))
	t.connect(username=username,password=password)
	sftp=paramiko.SFTPClient.from_transport(t)
	sftp.put("/home/test","/tmp/test")
	sftp.get("/tmp/test.txt","/home/test.txt")
	sftp.mkdir("/home/test.py")
	sftp.rmdir("/home/test.info")
	sftp.rename("/home/test.tt","home/testfile.tt")
	print sftp.stat("/home/test.info")
	print sftp.listdir("/home")
	t.close()
except Exception,e:
	print str(e)
	
	


运行ssh秘钥方式登录主机示例:

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

import paramiko
import os

username="root"
hostname="192.168.1.124"
paramiko.util.log_to_file('syslogin.log')

ssh=paramiko.SSHClient()
ssh.load_system_host_keys()
privatekey=os.path.expanduser('/home/key/id_rsa')
key=paramiko.RSAKey.from_private_key_file(privatekey)

ssh.connect(hostname=hostname,username=username,pkey=key)
stdin,stdout,stderr=ssh.exec_command('free -m')
print stdout.read()
ssh.close()


通过堡垒机远程执行命令示例:

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

import paramiko
import os,sys,time

blip="192.168.1.2"		#定义堡垒机
bluser="root"
blpasswd="lkj123456"

hostname="192.168.1.124"	#业务机器
username="root"
password="lkj123456"

passinfo='\'s password: '
paramiko.util.log_to_file('syslogin.log')

ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=blip,username=bluser,password=blpasswd)

channel=ssh.invoke_shell()	#开启命令调用
channel.settimeout(10)

buff=''
resp=''
channel.send('ssh '+username+'@'+hostname+'\n')
while not buff.endswith(passinfo):
	try:
		resp=channel.recv(9999)
	except Exception,e:
		print 'Error info: %s connection time.' % (str(e))
		channel.close()
		ssh.close()
		sys.exit()
	buff += resp
	if not buff.find('yes/no')==-1:
		channel.send('yes\n')
		buff=''
channel.send(password+'\n')
buff=''
while not buff.endswith('# '):
	resp=channel.recv(9999)
	if not resp.find(passinfo)==-1:
		print 'Error info: Authentication failed'
		channel.close()
		ssh.close()
		sys.exit()
	buff += resp

channel.send('free -m\n')
buff=''
try:
	while buff.find('# ')==-1:
		resp=channel.recv(9999)
		buff += resp
except Exception,e:
	print "error info:"+str(e)
print buff
channel.close()
ssh.close()


使用堡垒机模式下上传文件示例:

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

import paramiko
import os,sys,time

blip="192.168.1.2"		#定义堡垒机
bluser="root"
blpasswd="lkj123456"

hostname="192.168.1.124"	#业务机器
username="root"
password="lkj123456"

passinfo='\'s password: '
paramiko.util.log_to_file('syslogin.log')
tmpdir="/tmp"
remotedir="/data"
localpath="/home/nginx.tar.gz"
tmppath=tmpdir+"/nginx.tar.gz"
remotepath=remotedir+"nginx_access.tar.gz"
port=22

t=paramiko.Transport((blip,port))
t.connect(username=bluser,password=blpasswd)
sftp=paramiko.SFTPClient.from_transport(t)
sftp.put(localpath,tmppath)
sftp.close()

ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=blip,username=bluser,password=blpasswd)

channel=ssh.invoke_shell()
channel.settimeout(10)

buff=''
resp=''

channel.send('scp '+tmppath+' '+username+'@'+hostname+':'+remotepath+'\n')

while not buff.endswith(passinfo):
	try:
		resp=channel.recv(9999)
	except Exception,e:
		print 'Error info: %s connection time.' % (str(e))
		channel.close()
		ssh.close()
		sys.exit()
	buff += resp
	if not buff.find('yes/no')==-1:
		channel.send('yes\n')
		buff=''

while not buff.endswith('# '):
	resp=channel.recv(9999)
	if not resp.find(passinfo)==-1:
		print 'Error info: Authentication failed'
		channel.close()
		ssh.close()
		sys.exit()
	buff += resp

print buff
channel.close()
ssh.close()


一次连接多次执行命令的示例:


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paramiko
import sys
import os
import socket
import select
import getpass
import tty
import termios
# from paramiko.py3compat import u   py27需要注释
tran = paramiko.Transport(('192.168.1.124',22,))
tran.start_client()
tran.auth_password('root','123456')
#打开一个通道
chan = tran.open_session()
#获取一个通道
chan.get_pty()
#激活器
chan.invoke_shell()
#获取原tty属性,目的是为了在操作完以后恢复终端原型
oldtty = termios.tcgetattr(sys.stdin)
try:
    #为tty设置新属性
    #默认当前tty设备属性
    #输入一行回车,执行
    #ctrl +c 进程退出,遇到特殊字符,特殊处理
    #这是为原始模式,不认识特殊字符号
    #放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到 远程服务器
    tty.setraw(sys.stdin.fileno())
    chan.settimeout(0.0)
    while True:
        #监视用户输入和服务器返回数据
        #阻塞,直到句柄可读
        readable,writeable,error = select.select([chan,sys.stdin,],[],[],1)
        if chan in readable:
            try:
                #x = u(chan.recv(1024))
                x = chan.recv(1024)      #py27写法
                if len(x) == 0:
                    print('\r\n*** EOF\r\n')
                    break
                sys.stdout.write(x)
                sys.stdout.flush()
            except socket.timeout:
                pass
        if sys.stdin in readable:
            inp = sys.stdin.read(1)
            if len(inp) == 0:
                break
            chan.send(inp)
finally:
    #重新设置终端属性
    termios.tcsetattr(sys.stdin,termios.TCSADRAIN,oldtty)
chan.close()
tran.close()


示例仅供参考



免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python 利用paramiko批量管

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 利用paramiko批量管

paramiko是基于python实现的ssh2远程安全连接,支持秘钥认证,实现远程命令执行,文件传输,中间ssh代理等功能安装paramikoparamiko依赖第三方的crypto,ecdsa,python-develyum insta
2023-01-31

利用Python Paramiko开发l

1.Paramiko模块下的demo.py程序    前面利用Python中的Paramiko模块可以进行SSH的连接,以及用来传送文件(SFTP),但是无论是哪一种方式,连接都是短暂的,并非是长连的,即一次执行一个命令或上传与下载一个文件
2023-01-31

利用python批量删除文件

最近刚刚学了爬虫,爬了一个很有意思的网站——placekitten.com/g/num1/num2,最后是两个数字,在地址栏里输入这个网址,后面两个数字自己改成想要的大小,按回车,将会得到一张猫咪图片,图片大小跟自己输入的两个数值有关。于是
2023-01-31

利用Python批量保存51CTO博客

一、背景最近在整理博客,近在51CTO官网存在文章,想将之前写的全部保存到本地,发现用markdown写的可以导出,富文本的则不行,就想利用Python批量保存自己的博客到本地。二、代码git地址#!/bin/env python# -*-
2023-01-31

python利用Guetzli批量压缩图片

Google 又开源了,这次开源了一款图像算法工具 Guetzli。Guetzli,在瑞士德语中是“cookie(曲奇)”的意思,是一个针对数码图像和网页图像的 JPEG 编码器,能够通过产生更小的 JPEG 文件来达到更快的在线体验,并且
2022-06-04

批量管理python脚本

新出炉的脚本, 有错的地方还望指出,谢谢。 #!/usr/bin/env python # -*- coding: utf-8 -*- # #  Syscloud Operation platform.py #
2023-01-31

Python批量管理主机(paramik

paramikoparamiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令、文件传输等功能。默认Python没有,需要手动安装:pip install paramiko如安装失败,可以尝试yum安装:yum in
2023-01-31

利用python批量检查网站的可用性

前言 随着站点的增多,管理复杂性也上来了,俗话说:人多了不好带,我发现站点多了也不好管,因为这些站点里有重要的也有不重要的,重要核心的站点当然就管理的多一些,像一些万年都不出一次问题的,慢慢就被自己都淡忘了,冷不丁那天出个问题,还的手忙脚乱
2022-06-04

python实现主机批量管理

在日常的运维工作中批量对主机的是很常见的,市面上也有许多主机批量管理的软件,但有时候这些软件并不能完全的满足我们的需求。python中刚好提供了关于主机批量管理的模块,今天就让我们来看看如何利用python实现主机批量管理python提供主
2023-01-31

Python利用os模块批量修改文件名

初学Python.随笔记录自己的小练习.通过查阅资料os模块中rename和renames都可以做到他们的区别为.rename:只能修改文件名   renames:可以修改文件名,还可以修改文件上级目录名称另一个用到的方法是os.listd
2023-01-31

怎么利用Python批量爬取网页图片

你可以使用Python的requests库来发起HTTP请求,并使用BeautifulSoup库来解析HTML文档以获取图片的URL。下面是一个简单的示例代码,用于批量爬取网页上的图片:```pythonimport requestsfro
2023-09-27

利用Python批量生成任意尺寸的图片

实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片。 效果如下:目录结构 实现示例# -*- coding: utf-8 -*- import threadingfrom PIL
2022-06-04

[Python]用python实现批量/

针对前面的代码 http://lxsym.blog.51cto.com/1364623/1065854,还存在的问题进行了改善:    1、去掉明文密码,通过交互输入密码    2、通过传参执行相关命令,增加灵活性    3、异常处理   
2023-01-31

如何在Python中利用paramiko远程连接服务器

本篇文章为大家展示了如何在Python中利用paramiko远程连接服务器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学
2023-06-06

Python利用hashlib实现文件MD5码的批量存储

这篇文章主要为大家详细介绍了如何用Python和hashlib实现文件MD5码的批量存储功能,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
2023-05-19

利用python Pandas实现批量拆分Excel与合并Excel

目录一、实例演示二、读取源Excel到Pandas三、将一个大Excel等份拆成多个Excel四、合并多个小Excel到一个大Excel一、实例演示 1.将一个大Excel等份拆成多个Excel 2.将多个小Excel合并成一个大Excel
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录