Python远程连接主机之paramiko模块
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模块的更多相关文章
- python远程登录服务器(paramiko模块安装和使用)
转自:http://www.jb51.net/article/46285.htm 一:简介 由paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器 ...
- python远程连接paramiko 模块和堡垒机实现
paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...
- Python远程连接模块-Telnet
Python远程连接模块-Telnet 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 虽然现在主流的python版本还是2.7,相信2020年python程序员都会偏向Python ...
- Python 使用Python远程连接并操作InfluxDB数据库
使用Python远程连接并操作InfluxDB数据库 by:授客 QQ:1033553122 实践环境 Python 3.4.0 CentOS 6 64位(内核版本2.6.32-642.el6.x86 ...
- Python远程连接Redis
import redisr=redis.Redis(host='192.168.56.102',port=6379,db=0,password='jinxfredis' )r.set('name',' ...
- python网络编程——SocketServer/Twisted/paramiko模块
在之前博客C/S架构的网络编程中,IO多路复用是将多个IO操作复用到1个服务端进程中进行处理,即无论有多少个客户端进行连接请求,服务端始终只有1个进程对客户端进行响应,这样的好处是节省了系统开销(se ...
- python 3 并发编程多进程 paramiko 模块
python 3 paramiko模块 paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的pa ...
- Python远程连接MySQL数据库
使用Python连接数据库首先需要安装Python的数据库驱动. 我的本地只装了Python,并没有装MySQL,当我使用命令: sudo pip install mysql-python 安装驱动( ...
- python第四十九天--paramiko模块安装大作战
准备开始学习:paramiko模块,发现这个模块十分难搞 安装不上 搞了半天,win10 64下 pytyon 3.6 的 paramiko模块 死活安不上,在网上不断的找资料,可是没有用,没有用啊 ...
随机推荐
- 老刘 Yii2 源码学习笔记之 Module 类
关系类图 从上图可以看出 Application 类继承了 Module,在框架中的是非常重要角色. 加载配置 public function setModules($modules) { forea ...
- DIN-A4 doublesided year calendar
% DIN-A4 doublesided year calendar % Author: Robert Krause % License : Creative Commons attribution ...
- Android-控制整个APP的异常收集与处理
控制整个App的异常收集与处理,使用前记得要在Application中初始化initCrasHandler CrasHandler APP异常收集类: package common.library.e ...
- Android ListView setOnItemClickListener/setOnItemSelectedListener,无效
在Android 开发中,有时候我们在设置,LIstview,GridView,这些View的时候,再给他们设置:setOnItemClickListener/setOnItemSelectedLis ...
- [ACM_数据结构] POJ2352 [树状数组稍微变形]
Description Astronomers often examine star maps where stars are represented by points on a plane and ...
- NetMQ 消息队列
忘记是看到哪个博客写的了,如有侵权,请见谅!! 1.辅助Helper类 (添加System.Messaging引用) using System; using System.Collections.Ge ...
- POST与GET请求的区别
https://www.cnblogs.com/logsharing/p/8448446.html 返回主页 在途中# 博客园首页新随笔联系订阅管理 随笔 - 33 文章 - 5 评论 - 40 GE ...
- s11 day103 luffy项目结算部分+认证+django-redis
1.增加认证用的表 class Account(models.Model): username =models.CharField(,unique=True) email= models.EmailF ...
- LayUI把表格中的时间戳改成格式化的时间
- 重读源码,见证HashMap以及它的朋友们的骚操作
一.Getting Start Again and again,until you master it.早在接触java.util包的时候,我们都会去阅读ArrayList,甚至也会去阅读HashMa ...