paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。

1、下载安装

Windows:pip3 install paramiko

Linux:

# pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto

# 下载安装 pycrypto
wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz
tar -xvf pycrypto-2.6.1.tar.gz
cd pycrypto-2.6.1
python setup.py build
python setup.py install # 进入python环境,导入Crypto检查是否安装成功
from Crypto.Cipher import AES # 下载安装 paramiko
目前新的版本,官网在此:
https://github.com/paramiko/paramiko
unzip paramiko-master.zip
cd paramiko-master
python setup.py build
python setup.py install
centos7 Python3 可以直接pip3 install paramiko 我用的这种方法
# 进入python环境,导入paramiko检查是否安装成功
 [root@greg02 ~]# pip3 install paramiko
Collecting paramiko
Downloading paramiko-2.4.0-py2.py3-none-any.whl (192kB)
100% |████████████████████████████████| 194kB 65kB/s
Collecting bcrypt>=3.1.3 (from paramiko)
Downloading bcrypt-3.1.4-cp36-cp36m-manylinux1_x86_64.whl (54kB)
100% |████████████████████████████████| 61kB 99kB/s
Collecting cryptography>=1.5 (from paramiko)
Downloading cryptography-2.1.3-cp36-cp36m-manylinux1_x86_64.whl (2.2MB)
100% |████████████████████████████████| 2.2MB 95kB/s
Collecting pyasn1>=0.1.7 (from paramiko)
Downloading pyasn1-0.3.7-py2.py3-none-any.whl (63kB)
100% |████████████████████████████████| 71kB 203kB/s
Collecting pynacl>=1.0.1 (from paramiko)
Downloading PyNaCl-1.2.0-cp36-cp36m-manylinux1_x86_64.whl (692kB)
100% |████████████████████████████████| 696kB 91kB/s
Collecting six>=1.4.1 (from bcrypt>=3.1.3->paramiko)
Downloading six-1.11.0-py2.py3-none-any.whl
Collecting cffi>=1.1 (from bcrypt>=3.1.3->paramiko)
Downloading cffi-1.11.2-cp36-cp36m-manylinux1_x86_64.whl (419kB)
100% |████████████████████████████████| 430kB 339kB/s
Collecting idna>=2.1 (from cryptography>=1.5->paramiko)
Downloading idna-2.6-py2.py3-none-any.whl (56kB)
100% |████████████████████████████████| 61kB 388kB/s
Collecting asn1crypto>=0.21.0 (from cryptography>=1.5->paramiko)
Downloading asn1crypto-0.23.0-py2.py3-none-any.whl (99kB)
100% |████████████████████████████████| 102kB 416kB/s
Collecting pycparser (from cffi>=1.1->bcrypt>=3.1.3->paramiko)
Downloading pycparser-2.18.tar.gz (245kB)
100% |████████████████████████████████| 256kB 387kB/s
Installing collected packages: six, pycparser, cffi, bcrypt, idna, asn1crypto, cryptography, pyasn1, pynacl, paramiko
Running setup.py install for pycparser ... done
Successfully installed asn1crypto-0.23.0 bcrypt-3.1.4 cffi-1.11.2 cryptography-2.1.3 idna-2.6 paramiko-2.4.0 pyasn1-0.3.7 pycparser-2.18 pynacl-1.2.0 six-1.11.0
[root@greg02 ~]# python3
Python 3.6.2 (default, Nov 15 2017, 04:14:48)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import paramiko
>>>

安装记录

2.远程连接Linux(centos7)并打印命令结果

import paramiko

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect('192.168.179.130', 22, 'root', '') # 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
print(stdout.read()) # 关闭连接
ssh.close()

3. 通过公钥连接,前提是两台Linux可以互相连接

比如在Linux1(192.168.179.131)上配置公钥私钥,通过ssh 192.168.179.130无需输入密码可以连接Linux2

[root@greg02 ~]# ssh 192.168.179.130
Last login: Wed Nov 15 19:31:19 2017 from 192.168.179.131
[root@greg01 ~]#
[root@greg01 ~]#exit
logout
Connection to 192.168.179.130 closed.
import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect('192.168.179.130', 22, 'root', '123456',key=private_key) # 执行命令
stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果
result = stdout.read() # 关闭连接
ssh.close()

4.上传或下载文件

import os,sys
import paramiko t = paramiko.Transport(('192.168.179.130',22))
t.connect(username='root',password='greg311') sftp = paramiko.SFTPClient.from_transport(t) sftp.get('/root/test.py','d:/test.py')
sftp.put('d:/test.jpg','/root/test.jpg')
t.close()

5.通过密钥上传或下载文件

import paramiko

pravie_key_path = '/root/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('192.168.179.130',22))
t.connect(username='wupeiqi',pkey=key) sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test3.py','/tmp/test3.py')
sftp.get('/tmp/test4.py','/tmp/test4.py')
t.close()

6.python3 paramiko-master/demos/demo.py

[root@greg02 demos]#python3 demo.py
Hostname: 192.168.179.131
*** WARNING: Unknown host key!
Username [root]: root
Auth by (p)assword, (r)sa key, or (d)ss key? [p] p
Password for root@192.168.179.131:
*** Here we go! Last login: Wed Nov 15 19:09:05 2017 from 192.168.179.1
[root@greg01 ~]# ls
123.txt anaconda-ks.cfg index.html para2.py rsync
[root@greg01 ~]# exit
logout *** EOF
[root@greg02 demos]#vim demo.py

7.interactive捕获命令并记录

 import socket
import sys
import time
from paramiko.py3compat import u # windows does not have termios...
try:
import termios
import tty
has_termios = True
except ImportError:
has_termios = False def interactive_shell(chan):
if has_termios:
posix_shell(chan)
else:
windows_shell(chan) def posix_shell(chan):
import select oldtty = termios.tcgetattr(sys.stdin)
try:
tty.setraw(sys.stdin.fileno())
tty.setcbreak(sys.stdin.fileno())
chan.settimeout(0.0)
cmd = []
f = open('ssh_test.log','w')
while True:
r, w, e = select.select([chan, sys.stdin], [], [])
if chan in r:
try:
x = u(chan.recv(1024))
if len(x) == 0:
sys.stdout.write('\r\n*** EOF\r\n')
break
sys.stdout.write(x)
sys.stdout.flush()
except socket.timeout:
pass
if sys.stdin in r:
x = sys.stdin.read(1)
if len(x) == 0:
break
if x == '\r':
print('input>',''.join(cmd))
log = "%s %s\n" %(time.strftime("%Y-%m-%d %X", time.gmtime()), ''.join(cmd))
print(log)
f.write(log)
cmd = []
else:
cmd.append(x)
chan.send(x) finally:
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
f.close() # thanks to Mike Looijmans for this code
def windows_shell(chan): print("window chan",chan.host_to_user_obj)
print("window chan",chan.crazyeye_account)
import threading sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n") def writeall(sock):
while True:
data = sock.recv(256)
if not data:
sys.stdout.write('\r\n*** EOF ***\r\n\r\n')
sys.stdout.flush()
break
sys.stdout.write(data)
sys.stdout.flush() writer = threading.Thread(target=writeall, args=(chan,))
writer.start() try:
while True:
d = sys.stdin.read(1)
if not d:
break
chan.send(d)
except EOFError:
# user hit ^Z or F6
pass

运行:

[root@greg02 demos]#cat ssh_test.log
2017-11-15 12:33:18 ls
2017-11-15 12:33:32 cd /pa pa mi
2017-11-15 12:33:33 ls
2017-11-15 12:33:40 exit

Python模块:paramiko的更多相关文章

  1. Python模块 - paramiko

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1 基于用户名和密码的 sshclient 方式登录 # 建立一个s ...

  2. python安装paramiko模块

    一.简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...

  3. 如何进行服务器的批量管理以及python 的paramiko的模块

    最近对公司的通道机账号进行改造管理,全面的更加深入的理解了公司账号管理的架构.(注:基本上所有的机器上的ssh不能使用,只有部分机器能够使用.为了安全的角度考虑,安装的不是公版的ssh,而都是定制版的 ...

  4. python模块之paramiko

              46.python模块之paramiko   SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  5. Python 模块功能paramiko SSH 远程执行及远程下载

    模块 paramiko paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现 ...

  6. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  7. python的paramiko模块

        paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X, ...

  8. Python之paramiko模块

    今天我们来了解一下python的paramiko模块 paramiko是python基于SSH用于远程服务器并执行相应的操作. 我们先在windows下安装paramiko 1.cmd下用pip安装p ...

  9. 使用python的Paramiko模块登陆SSH

    使用python的Paramiko模块登陆SSH paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. python的paramiko模块 ...

  10. 利用python 下paramiko模块无密码登录

    利用python 下paramiko模块无密码登录   上次我个大家介绍了利用paramiko这个模块,可以模拟ssh登陆远程服务器,并且可以返回执行的命令结果,这次给大家介绍下如何利用已经建立的密钥 ...

随机推荐

  1. 在Java环境上运行redis

    首先你得有Java环境,不多说,参考http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html 下载redis驱动包 链接:http: ...

  2. 学习的Python教程中的一些问题

    2017开始学习Python,在网上找了很多教程,最后看到了Vamei的教程,感觉很简单易懂,但是过程中难免有不太容易理解的问题,做一些随笔,加深记忆亦可让以后学习的同学少走一些弯路. 1 Pytho ...

  3. php设计模式 工厂模式和单例模式

    一.单例模式//让该类在外界无法造对象//让外界可以造一个对象,做一个静态方法返回对象//在类里面通过让静态变量控制返回对象只能是一个. 单例模式的要点有三个: 一是某个类只能有一个实例: 二是它必须 ...

  4. Android的快速开发框架 afinal

    afinal 框架学习: http://www.oschina.net/p/afinal

  5. 即时通信系统Openfire分析之七:集群配置

    前言 写这章之前,我犹豫了一会.在这个时候提集群,从章节安排上来讲,是否合适?但想到上一章<路由表>的相关内容,应该不至于太突兀.既然这样,那就撸起袖子干吧. Openfire的单机并发量 ...

  6. socket__服务端于客户端

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/23 15:33 # @Author : Mr_zhang # @Site ...

  7. Archlinux运行FlashTool

    首先,http://www.flashtool.net/index.php下载linux版的FlashTool,并且按照其说明在/etc/udev加入如下字段: SUBSYSTEM== »usb », ...

  8. (转)java内存泄漏的定位与分析

    转自:http://blog.csdn.net/x_i_y_u_e/article/details/51137492 1.为什么会发生内存泄漏 java 如何检测内在泄漏呢?我们需要一些工具进行检测, ...

  9. WPF ListBox 一些小知识点

    页面代码: <Grid Grid.Row="0" Grid.Column="2"> <ListBox x:Name="lvStep& ...

  10. 01-从零玩转JavaWeb-面向过程与面向对象

    配套视频讲解:面向过程面向对象 一.面向过程 所有事情都按顺序一件一件来执行.   二.面向对象 面向对象是将功能通过对象也实现,将功能封装进对象之中 让对象去实现具体的细节   三.面向对象的目的 ...