Python的paramiko模块能够连接远程主机,并在该主机上执行命令,和该主机之间进行文件传输。paramiko支持用明文密码登录远程主机和秘钥登录。使用之前要安装一下这个模块哈,pip install paramiko,不会安装可以百度哈。

(1)密码登录

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Author: "Liuyouyuan"
# Date: 2018/1/23 import paramiko def run_cmd(host, port, user, passwd, cmd):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, port=port, username=user, password=passwd)
stdin, stdout, stderr = ssh.exec_command(cmd) stdout = stdout.read()
stderr = stderr.read()
ssh.close()
if not stderr:
print(stdout.decode())
else:
print(stderr.decode()) if __name__ == '__main__':
HOST = "10.129.205.151"
PORT = 22
USER = "root"
PASSWD = "******"
cmd = "df -h"
run_cmd(HOST, PORT, USER, PASSWD, cmd)

 来看执行结果:

Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root 17G .8G 11G % /
devtmpfs 897M 897M % /dev
tmpfs 912M 84K 912M % /dev/shm
tmpfs 912M 9.0M 903M % /run
tmpfs 912M 912M % /sys/fs/cgroup
/dev/sda1 1014M 173M 842M % /boot
tmpfs 183M 16K 183M % /run/user/
tmpfs 183M 183M % /run/user/

(2)秘钥登录

def run_cmd_pkey(host, port, user, rsa_file):
"""
linux 端创建秘钥 ssh-keygen
把要连的机子的公钥改名 mv id_rsa.pub authorized_keys
想要连接哪台机器就直接把公钥copy到该机器的用户home下 格式:/root/.ssh
"""
private_key = paramiko.RSAKey.from_private_key_file(rsa_file) # 指定私钥所在文件
ssh = paramiko.SSHClient() # 创建ssh对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机
ssh.connect(hostname=host, port=port, username=user, pkey=private_key) # 连接服务器
stdin, stdout, stderr = ssh.exec_command("df") # 执行命令 stdout = stdout.read()
stderr = stderr.read()
ssh.close() # 关闭连接
if not stderr:
print(stdout.decode())
else:
print(stderr.decode())

(3)上传下载文件明文密码版本

import paramiko
def ssh_transfer_file(host, port, user, passwd, local_file, remote_file):
transport = paramiko.Transport(host, port)
transport.connect(username=user, password=passwd)
sftp = paramiko.SFTPClient.from_transport(transport)
# sftp.put(local_file, remote_file) # 从本地上传文件到远程主机
sftp.get(remote_file, local_file) # 从远程主机下载到本地
transport.close() if __name__ == '__main__':
HOST = "10.129.205.151"
PORT = 22
USER = "root"
PASSWD = "******"
cmd = "df -h"
remote_file = "/data/download/nginx-1.12.0.tar.gz"
local_file = "nginx-1.12.0.tar.gz"
ssh_transfer_file(HOST, PORT, USER, PASSWD, local_file, remote_file)

 先测试下下载功能。

首先看下远程主机上的文件:

[root@liuyouyuan download]# ll /data/download
total
drwxr-xr-x. lyy lyy Jul nginx-1.12.
-rw-r--r--. root root Apr nginx-1.12..tar.gz
drwxr-xr-x. Jul Python-3.6.
-rw-r--r--. root root Mar Python-3.6..tar.xz

然后运行代码后看看本地:

这就已经把nginx压缩包下载到本地了。上传功能就不做演示了,有兴趣的可以自己测试一下哈。

(4)上传下载文件秘钥版

def ssh_transfer_file_pkey(host, port, user, rsa_file, local_file, remote_file):
private_key = paramiko.RSAKey.from_private_key_file(rsa_file) # 指定私钥所在文件
transport = paramiko.Transport(host, port)
transport.connect(username=user, pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport) sftp.put(local_file, remote_file) # 从本地上传文件到远程主机
# sftp.get(remote_file, local_file) # 从远程主机下载到本地
transport.close()

 是不是比较简单呢?

Python远程连接主机之paramiko模块的更多相关文章

  1. python远程登录服务器(paramiko模块安装和使用)

    转自:http://www.jb51.net/article/46285.htm 一:简介 由paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器 ...

  2. python远程连接paramiko 模块和堡垒机实现

    paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...

  3. Python远程连接模块-Telnet

    Python远程连接模块-Telnet 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 虽然现在主流的python版本还是2.7,相信2020年python程序员都会偏向Python ...

  4. Python 使用Python远程连接并操作InfluxDB数据库

    使用Python远程连接并操作InfluxDB数据库 by:授客 QQ:1033553122 实践环境 Python 3.4.0 CentOS 6 64位(内核版本2.6.32-642.el6.x86 ...

  5. Python远程连接Redis

    import redisr=redis.Redis(host='192.168.56.102',port=6379,db=0,password='jinxfredis' )r.set('name',' ...

  6. python网络编程——SocketServer/Twisted/paramiko模块

    在之前博客C/S架构的网络编程中,IO多路复用是将多个IO操作复用到1个服务端进程中进行处理,即无论有多少个客户端进行连接请求,服务端始终只有1个进程对客户端进行响应,这样的好处是节省了系统开销(se ...

  7. python 3 并发编程多进程 paramiko 模块

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

  8. Python远程连接MySQL数据库

    使用Python连接数据库首先需要安装Python的数据库驱动. 我的本地只装了Python,并没有装MySQL,当我使用命令: sudo pip install mysql-python 安装驱动( ...

  9. python第四十九天--paramiko模块安装大作战

    准备开始学习:paramiko模块,发现这个模块十分难搞 安装不上 搞了半天,win10 64下 pytyon 3.6 的 paramiko模块 死活安不上,在网上不断的找资料,可是没有用,没有用啊 ...

随机推荐

  1. [FMX]将 Android 程序切换到后台及从后台切换到前台实现

    有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元:   1 uses Androidapi.JNI.App,Andr ...

  2. Linux C++ - IP地址转换函数

    1. 函数用途:数字网络序本地序转换 适用类型:IP地址uint32_t类型.端口号uint16_t类型 #include<netinet/in.h> extern uint32_t nt ...

  3. TFS实战培训 - 博时基金公司 (2016年8月)

    博时基金管理有限公司是中国内地首批成立的五家基金管理公司之一, 是目前我国资产管理规模最大的基金公司. 博时信息技术部的的软件研发团队是负责公司信息化的核心技术部门,为提升软件产品的研发效率和质量,计 ...

  4. JS和C#访问遇到QueryInterface调用出错

    在原来的WinForm里,我们只要在窗体类的头部添加属性[System.Runtime.InteropServices.ComVisibleAttribute(true)],然后 webBrowser ...

  5. python——排序

    从学校毕业出来后只知道冒泡排序,发现自己对排序的了解还是很浅显. 于是在网上搜索各种排序方法,以下是本人根据索搜出来的资料再结合自己理解作出的一些简单的阐述. 如果有不正确的地方欢迎大家指正.(共同学 ...

  6. 5.WebAPI的Filter

    1.WebApi的Filter介绍: 大家知道什么是AOP(aspect oriented programming)吗?它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添 ...

  7. ARM 编译工具keil 和 IAR 命令行编译和下载

    目的 不管是Keil还是IAR对代码补全,高亮等编辑功能支持的不是很好,虽然现在的Keil 5.25对界面的支持好了很多,但是很多人还是青睐于第三方的编辑器,命令行的编译方式可以让我们在使用第三方编辑 ...

  8. Android TV Overscan

    本文来自网易云社区 作者:孙有军 开发的TV应用发现在部分电视上可以显示完整,而其他部分电视显示不全,周围都会遮挡了. 原因 这是因为部分老的电视有一个overscan的概览,什么叫overscan呐 ...

  9. OI字符串 简单学习笔记

    持续更新qwq KMP 其实是MP啦qwq 就是先自己匹配自己得到状态图,然后再在上面进行模式串的匹配. nxt数组返回的是以该节点结尾的,最长的,在前面出现过的,不相交的,字符串的最靠右的,末位位置 ...

  10. “全栈2019”Java多线程第二十一章:同步代码块产生死锁的例子

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...