p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

paramiko是基于python实现的SSH2远程安全连接,支持认证以及密钥方式,可以实现远程命令执行,文件传输,中间SSH代理等功能。也就是采用SSH的方式进行远程访问。SSH登陆的方式可以参考之前的一片帖子:http://www.cnblogs.com/zhanghongfeng/p/7749489.html

下面来看一个远程登陆的例子如下:

def paramiko_function_try():
    hostname="192.168.0.9"
    username='root'
    password='root'
    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('ls -al')
    print stdout.read()
    ssh.close()

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

执行结果:

total 64

drwx------ 10 root root 4096 Oct 29 10:02 .

drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..

-rw------- 1 root root 4143 Oct 29 10:14 .bash_history

-rw-r--r-- 1 root root 3106 Feb 20 2014 .bashrc

drwx------ 5 root root 4096 Aug 31 21:47 .cache

drwx------ 4 root root 4096 Jul 26 10:47 .config

drwx------ 3 root root 4096 Jul 9 15:59 .dbus

drwx------ 2 root root 4096 Jul 9 16:23 .gvfs

drwxr-xr-x 3 root root 4096 Jul 26 11:23 .local

drwxr-xr-x 2 root root 4096 Jul 26 11:33 .pip

-rw-r--r-- 1 root root 140 Feb 20 2014 .profile

drwxr-xr-x 3 root root 4096 Jul 26 11:41 .python-eggs

drwx------ 2 root root 4096 Oct 27 23:11 .ssh

-rw-r--r-- 1 root root 0 Oct 29 10:02 test.txt

-rw------- 1 root root 5436 Oct 27 22:11 .viminfo

从syslogin.log中也可以查看整个建链的过程。

DEB
[20171029-20:41:29.564] thr=1 paramiko.transport: Kex agreed:
ecdh-sha2-nistp256

DEB
[20171029-20:41:29.564] thr=1 paramiko.transport: HostKey agreed:
ecdsa-sha2-nistp256

DEB
[20171029-20:41:29.565] thr=1 paramiko.transport: Cipher agreed:
aes128-ctr

DEB
[20171029-20:41:29.565] thr=1 paramiko.transport: MAC agreed:
hmac-sha2-256

DEB
[20171029-20:41:29.565] thr=1 paramiko.transport: Compression
agreed: none

DEB
[20171029-20:41:29.627] thr=1 paramiko.transport: kex engine
KexNistp256 specified hash_algo <built-in function openssl_sha256>

DEB
[20171029-20:41:29.628] thr=1 paramiko.transport: Switch to new
keys ...

DEB
[20171029-20:41:29.639] thr=2 paramiko.transport: Trying discovered
key 267fb51feeeaf45abbf324467ee574d8 in /root/.ssh/id_rsa

DEB
[20171029-20:41:29.676] thr=1 paramiko.transport: userauth is OK

INF
[20171029-20:41:29.808] thr=1 paramiko.transport: Authentication
(publickey) successful!

DEB
[20171029-20:41:29.841] thr=2 paramiko.transport: [chan 0] Max
packet in: 32768 bytes

DEB
[20171029-20:41:30.281] thr=1 paramiko.transport: [chan 0] Max
packet out: 32768 bytes

DEB
[20171029-20:41:30.281] thr=1 paramiko.transport: Secsh channel 0
opened.

DEB
[20171029-20:41:30.330] thr=1 paramiko.transport: [chan 0] Sesch
channel 0 request ok

DEB
[20171029-20:41:30.356] thr=1 paramiko.transport: [chan 0] EOF
received (0)

DEB
[20171029-20:41:30.357] thr=1 paramiko.transport: EOF in transport
thread

接下来介绍下connect方法中的参数:

hostname:
连接的目标主机地址

port:端口,默认为22

username:校验的用户名

password:
密码用于身份校验或解锁私钥

pkey:私钥方式用于身份验证

key_filename:一个文件名或文件名的列表,用于私钥的身份验证

timeout:
可选的超时时间的TCP连接

allow_agent:
设置为false用于禁用连接到SSH代理

look_for_keys:设置为False用来禁用在~/.ssh中搜索私钥文件

compress:设置为True时打开压缩。

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

前面只是连接到了远程电脑并执行命令,如果要上传下载文件的话还是要采用SFTP的方法。

示例代码如下,首先要创造一个已连通的SFTP客户端通道。然后采用put上传get下载的方法进行文件的上传和下载。注意的是put的时候本地路径为第一个参数,远端路径为第二个参数。get的时候远端路径为第一个参数,本地路径为第二个参数。

def SFTP_function_try():
    t=paramiko.Transport(("192.168.0.9",22))
    t.connect(username='root',password='root')
    sftp=paramiko.SFTPClient.from_transport(t)
    localpath='/home/zhf/zhf/python_prj/auto_manintance/syslogin.log'
    remotepath='/home/zhf/syslogin.log'
    sftp.put(localpath,remotepath)
    localpath='/home/zhf/zhf/python_prj/auto_manintance/log.log'
    remotepath='/home/root'
    sftp.get(remotepath,localpath)

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

在前面介绍SSH的时候讲过免密码登陆的方式,现在我们来看下通过paramiko如何免密码,通过证书登陆

示例代码如下:

def paramiko_function_auto():
    hostname="192.168.0.9"
    username='root'
    password='root'
    paramiko.util.log_to_file('syslogin.log')
    ssh=paramiko.SSHClient()
    ssh.load_system_host_keys()
    privatekey=os.path.expanduser('~/.ssh/id_rsa')
    key=paramiko.RSAKey.from_private_key_file(privatekey)
    ssh.connect(hostname=hostname,username=username,pkey=key)
    stdin,stdout,stderr=ssh.exec_command('ls -al')
    print stdout.read()
    ssh.close()

python自动化运维五:paramiko的更多相关文章

  1. python自动化运维五:pexpect

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } pexpect是expect的封装,可以实现ssh,ftp,passwd,telne ...

  2. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  3. Python自动化运维的职业发展道路(暂定)

    Python职业发展之路 Python自动化运维工程 Python基础 Linux Shell Fabric Ansible Playbook Zabbix Saltstack Puppet Dock ...

  4. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  5. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...

  6. python自动化运维之CMDB篇-大米哥

    python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ  ...

  7. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  8. python自动化运维学习第一天--day1

    学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...

  9. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

随机推荐

  1. 多个版本的Python如何设置不冲突

    同时装有Python2.7和Python3.5说明. 问题1: 设置右键点击"Edit with IDLE"选项打开的Python版本? 在运行输入"regedit&qu ...

  2. Apache CXF入门

    CXF简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了.CXF 继承了 Celtix 和 XFire 两大 ...

  3. 这家IT教育公司太拼了:毕业生找不到工作就全额退学费!

    乐橙谷为了让更多的学生有工作,有高薪工作,已经决定尝试一种更刺激的游戏规则:完成课时的学员如果毕业找不到工作,公司将全额退还学费.这家公司秉承着自己的使命:以尊重的文化,敬畏的心态去努力帮助每个学生实 ...

  4. Redis常见的应用场景解析

    Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景. Redis特性 一个产品的使用场 ...

  5. php字符的替换,截取,指定查找

    <?php/** * Created by 郭鹏. * User: msi * Date: 2017/9/27 * Time: 14:17 *///随机数生成器echo rand();echo ...

  6. [js高手之路] html5 canvas系列教程 - 状态详解(save与restore)

    本文内容与路径([js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解)是canvas中比较重要的概念.掌握理解他们是做出复杂canvas动 ...

  7. 如何关闭eclipse对js xml的验证

    经常会发现导入一些js框架,eclipse会编译报错 这是eclipse对js的瞎验证,如何解决呢? 关闭eclipse对js,xml的验证即可: 菜单Window - > Preference ...

  8. [js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标

    有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下: [js高手之路] html5 canvas系列教程 ...

  9. 【转】NoClassDefFoundError和ClassNotFoundException

    调试Hadoop源码时,一运行就报这个错误,后来发现是maven配置时,scope配置的问题, MAVEN Scope使用  相关链接:http://acooly.iteye.com/blog/178 ...

  10. 使用jvisualvm远程监控Java程序

    使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linux, ...