python3.6, windows下

1,安装paramiko模块

依赖cryptography:使用命令easy_install安装该模块时,如果报错“...microsoft visual c++ 14.0 is required.”,

可以下载.whl文件,使用命令pip install cryptography.whl

其他依赖模块bcrypt,pynacl类似安装

2, 需求

a, 实现执行远程命令,并打印其返回值

b,实现执行远程脚本,并打印其返回值

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import paramiko
from functools import wraps
from datetime import datetimedef timethis(func):"""时间装饰器,计算函数执行所消耗的时间:param func::return:"""@wraps(func)def wrapper(*args, **kwargs):start = datetime.now()result = func(*args, **kwargs)end = datetime.now()print(func.__name__, end-start)return resultreturn wrapperclass SSHManager:def __init__(self, host, usr, passwd):self._host = hostself._usr = usrself._passwd = passwdself._ssh = Noneself._sftp = Noneself._sftp_connect()self._ssh_connect()def __del__(self):if self._ssh:self._ssh.close()if self._sftp:self._sftp.close()def _sftp_connect(self):try:transport = paramiko.Transport((self._host, 22))transport.connect(username=self._usr, password=self._passwd)self._sftp = paramiko.SFTPClient.from_transport(transport)except Exception as e:raise RuntimeError("sftp connect failed [%s]" % str(e))def _ssh_connect(self):try:# 创建ssh对象self._ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机self._ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器self._ssh.connect(hostname=self._host,port=22,username=self._usr,password=self._passwd,timeout=5)except Exception:raise RuntimeError("ssh connected to [host:%s, usr:%s, passwd:%s] failed" %(self._host, self._usr, self._passwd))def ssh_exec_cmd(self, cmd, path='~'):"""通过ssh连接到远程服务器,执行给定的命令:param cmd: 执行的命令:param path: 命令执行的目录:return: 返回结果"""try:result = self._exec_command('cd ' + path + ';' + cmd)print(result)except Exception:raise RuntimeError('exec cmd [%s] failed' % cmd)def ssh_exec_shell(self, local_file, remote_file, exec_path):"""执行远程的sh脚本文件:param local_file: 本地shell文件:param remote_file: 远程shell文件:param exec_path: 执行目录:return:"""try:if not self.is_file_exist(local_file):raise RuntimeError('File [%s] not exist' % local_file)if not self.is_shell_file(local_file):raise RuntimeError('File [%s] is not a shell file' % local_file)self._check_remote_file(local_file, remote_file)result = self._exec_command('chmod +x ' + remote_file + '; cd' + exec_path + ';/bin/bash ' + remote_file)print('exec shell result: ', result)except Exception as e:raise RuntimeError('ssh exec shell failed [%s]' % str(e))@staticmethoddef is_shell_file(file_name):return file_name.endswith('.sh')@staticmethoddef is_file_exist(file_name):try:with open(file_name, 'r'):return Trueexcept Exception as e:return Falsedef _check_remote_file(self, local_file, remote_file):"""检测远程的脚本文件和当前的脚本文件是否一致,如果不一致,则上传本地脚本文件:param local_file::param remote_file::return:"""try:result = self._exec_command('find' + remote_file)if len(result) == 0:self._upload_file(local_file, remote_file)else:lf_size = os.path.getsize(local_file)result = self._exec_command('du -b' + remote_file)rf_size = int(result.split('\t')[0])if lf_size != rf_size:self._upload_file(local_file, remote_file)except Exception as e:raise RuntimeError("check error [%s]" % str(e))@timethisdef _upload_file(self, local_file, remote_file):"""通过sftp上传本地文件到远程:param local_file::param remote_file::return:"""try:self._sftp.put(local_file, remote_file)except Exception as e:raise RuntimeError('upload failed [%s]' % str(e))def _exec_command(self, cmd):"""通过ssh执行远程命令:param cmd::return:"""try:stdin, stdout, stderr = self._ssh.exec_command(cmd)return stdout.read().decode()except Exception as e:raise RuntimeError('Exec command [%s] failed' % str(cmd))if __name__ == '__main__':ip = '192.168.159.142'usr = 'leo'passwd = '123'ssh = SSHManager(ip, usr, passwd)ssh.ssh_exec_cmd('ls')ssh.ssh_exec_shell('./test.sh', '/home/leo/test.sh', '/home/leo')

out:

python利用paramiko实现ssh连接及远程执行命令相关推荐

  1. java实现连接linux,JAVA实现远道SSH连接linux并执行命令

    JAVA实现远程SSH连接linux并执行命令 package com.codeconch.ssh; import java.io.BufferedReader; import java.io.IOE ...

  2. java使用ssh连接Linux并执行命令

    maven pom.xml配置:<dependency><groupId>com.jcraft</groupId><artifactId>jsch< ...

  3. Python入门自学进阶——9-网络编程-远程执行命令

    远程执行命令 类似远程终端,输入一个命令,在对端执行.也是网络通信编程的典型应用. socket连接都是一样的,发送内容也是一样的,不同之处是,对端拿到的内容,当做命令执行,然后,将执行的结果反馈给对 ...

  4. 【代码】python paramiko模块代码示例:远程执行命令及上传和下载

    执行命令 - 通过用户名和密码连接服务器 #!/usr/bin/env python #coding:utf-8import paramikossh = paramiko.SSHClient() ss ...

  5. python通过ssh连接linux,执行命令

    #连接ssh的工具函数 def loginLinux(reqdata,hostname,username,password):try:# 创建ssh对象ssh = paramiko.SSHClient ...

  6. Ubuntu SSH连接、远程上传下载文件

    Ubuntu SSH连接.远程上传下载文件 目录 SSH 概念 安装 SSH(Secure Shell) 服务以提供远程管理服务 将文件/文件夹从远程 Ubuntu 机拷至本地(scp) 将文件/文件 ...

  7. python paramiko模块:远程执行命令及上传和下载

    远程执行命令: df -y 交互输入y 基于公钥和私钥远程执行命令: 上传下载文件: 基于公钥和私钥上传和下载:

  8. ssh 远程执行命令

    SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作.接下来我们详细讲解一些常用的情况. 1.执行简单的命令: 1)查看某台主机上的磁盘使用情况: $ ssh root@1. ...

  9. linux 带环境变量 远程执行,SSH远程执行命令环境变量问题

    SSH命令格式 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address: ...

最新文章

  1. C# checked、unchecked操作符
  2. 大数模板(加减乘除幂次开方)
  3. 无法在终端中显示Git树
  4. CentOS下软件的安装
  5. 分享:游戏新手引导程序框架设计3要点
  6. php中的getdate+函数,PHP中的getdate()函数
  7. 哈工大深圳计算机专业,《计算机考研择校》哈工大深圳和北航哪个好考些?
  8. 4-2   ADO.NET-查询和检索数据1
  9. java中计算平均成绩_Java计算平均成绩
  10. 【clickhouse】 clickhouse配置查询记录query_log
  11. HarmonyOS竞赛,2021全国大学生物联网设计竞赛正式开赛,全新HarmonyOS赛题引关注...
  12. 习题第一章 构造过程抽象
  13. GB-T 15834-2011《标点符号用法》文档的格式问题
  14. 韩顺平Linux操作系统视频教程
  15. libcef和js交互
  16. 苹果描述文件服务器证书无效,iOS 描述文件重新配置失效问题,解决方法!
  17. 建站神器:使用Hexo+Kaze+Gitee 自建博客
  18. Unity3D游戏开发引擎的产品特点
  19. [附源码]计算机毕业设计JAVAjsp小微企业库存管理系统
  20. 基于 nRF SDK17.2,Nordic NFC 读写的实现。

热门文章

  1. 充电桩动态管理系统java_一种充电桩管理系统及其使用方法
  2. 高考0分作文精选--各行各业出人意料和情理之中
  3. C# 读取.txt文档和.docx文档。npoi读取word文档
  4. 怎么去除视频水印软件?
  5. 这八款Windows效率软件,办公舒适度提升
  6. 接口(对抽象的抽象)
  7. ubuntu proxy(代理)设置全局
  8. 计算机二级office考试多久能做完,2019年9月计算机二级office考试压轴干货,这些细节能帮你多考15分以上 - IT考试网...
  9. mysql表明明没有外键却删不掉_mysql为什么不让删外键?
  10. 中国半导体解围无芯之困:需资金支持 更需要人才培养