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. line tension

    <!DOCTYPE html> <html> <head> <title>tension</title> <script type=& ...

  2. ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明

    今天抽出了一些时间实践了viewgroup和view的触摸事件顺序,之前也试过,总是忘记,今天记下笔记说明一下 首先 onInterceptTouchEvent只会出现在viewgroup中,view ...

  3. ORACLE 管道技术应用

    但是使用管道函数的时候是可以返回一个package里面定义的type的. create or replace package test_typeis    type test_type_record ...

  4. sql 中如何查询某一列的数据在另一个表中有没有?

    假设表table1,列a,表table2,列bselect a from table1where a not in(select b from table2)

  5. C# GDI绘制波形图

    直接上效果图如下 public partial class WaveChartUserCtrl : UserControl { Color axisColor = Color.FromArgb(69, ...

  6. leetcode 121. 买卖股票的最佳时机 JAVA

    题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票 ...

  7. JDBC连接数据库7个步骤

    JDBC连接数据库    •创建一个以JDBC连接数据库的程序,包含7个步骤:    1.JDBC所需的四个参数(user,password,url,driverClass) (1)user用户名 ( ...

  8. 尺寸单位em,rem,vh,vw

    这几天做demo,看了网上教程有用到尺寸单位vh,vw, 这些单位不是很熟悉,所以上网上找了些资料来认识了这些不认识的单位 1.em 在做手机端的时候经常会用到的做字体的尺寸单位 说白了 em就相当于 ...

  9. php引用使用不恰当而产生问题的地方

    php变量的引用,如果使用的恰当,会带来效率的提升,相反,效率下降 $array = range(, ); $ref =& $array; var_dump(count($array)); / ...

  10. web应用配置虚拟路径映射方式一配置不成功问题解决办法

    配置过程图: 为了方便输入,先修改Tomcat的conf文件下的server.xml文件 默认端口修改为80 配置完成之后访问报404错误解决办法: 一.如果配置前已经开启了Tomcat服务器,配置完 ...