有时会需要在远程的机器上执行一个命令,并获得其返回结果。对于这种情况,python 可以很容易的实现。

1 、工具

Python paramiko

1) Paramiko模块安装

  在Linux的Terminal中,直接输入pip install paramiko 命令安装。

2)确定paramiko安装成功

  在python命令行输入import paramiko,确认是否安装成功,没报错就没问题。

2、步骤

1 、导入 paramiko 模块

  1. #!/usr/bin/python
  2. import paramiko

2 、创建 ssh 连接函数

  1. def ssh_connect( _host, _username, _password ):
  2. try:
  3. _ssh_fd = paramiko.SSHClient()
  4. _ssh_fd.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
  5. _ssh_fd.connect( _host, username = _username, password = _password )
  6. except Exception, e:
  7. print( 'ssh %s@%s: %s' % (_username, _host, e) )
  8. exit()
  9. return _ssh_fd

3、 创建命令执行函数

  1. def ssh_exec_cmd( _ssh_fd, _cmd ):
  2. return _ssh_fd.exec_command( _cmd )

4 、创建关闭 ssh 函数

  1. def ssh_close( _ssh_fd ):
  2. _ssh_fd.close()

5、使用示例

  1. def main():
  2. hostname = '192.168.1.46'
  3. port = 22
  4. username = 'root'
  5. password = 'P@ssw0rd'
  6. cmd = "ip a"
  7.  
  8. sshd = ssh_connect( hostname , username , password )
  9. stdin, stdout, stderr = ssh_exec_cmd( sshd, cmd )
  10. err_list = stderr.readlines()
  11.  
  12. if len( err_list ) > 0:
  13. print 'ERROR:' + err_list[0]
  14. exit()
  15.  
  16. for item in stdout.readlines():
  17. print item,
  18. ssh_close( sshd )
  19.  
  20. if __name__ == "__main__":
  21. main()

如果执行脚本成功,会成功返回以下结果。

['1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN \n', ' link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n', ' inet 127.0.0.1/8 scope host lo\n', ' inet6 ::1/128 scope host \n', ' valid_lft forever preferred_lft forever\n', '2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000\n', ' link/ether 00:50:56:b3:6c:03 brd ff:ff:ff:ff:ff:ff\n', 'inet 192.168.1.46/24 brd 192.168.1.255 scope global eth0\n', ' inet6 fe80::250:56ff:feb3:6c03/64 scope link \n', ' valid_lft forever preferred_lft forever\n']

 在实际的开发中,每次更新模块的jar包时,都需要使用 ps -ef | grep java, 查看模块的进程号,然后使用使用命令 kill -9 进程号,处理掉进程,然后重新启动 模块。

下面尝试使用python脚本来代替手工输入代码。

3、实例

1) 启动模块

  1. # -*- coding: utf-8 -*-
  2.  
  3. import paramiko
  4. ssh = paramiko.SSHClient()
  5. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  6. ssh.connect('192.168.1.222', username = 'root', password = 'P@ssw0rd', timeout = 5)
  7. cmd = 'nohup /csdp/charge_launcher-1.0-release/bin/run.sh > /csdp/charge_launcher-1.0-release/bin/nohup.out 2>&1 & \r\n'
  8.  
  9. password= 'P@ssw0rd'
  10.  
  11. stdin, stdout, stderr = ssh.exec_command( cmd )
  12. ##stdin, stdout, stderr = ssh.exec_command('sudo -S %s\n' % cmd )
  13. ##stdin.write('%s\r\n' % password)
  14. ##stdin.flush()
  15. print "------------------------"
  16. ##print stdout.readlines()
  17. ##print stderr.read()
  18.  
  19. print "------------------------"
  20. cmd = 'pwd'
  21. stdin, stdout, stderr = ssh.exec_command(cmd )
  22. print stdout.readlines()
  23.  
  24. ssh.close()

2) 远程上传文件

  1. # -*- coding: utf-8 -*-
  2. import paramiko
  3.  
  4. serverIp = '192.168.55.243'
  5. serverUser = 'root'
  6. serverPwd = 'P@ssw0rd'
  7.  
  8. localFile = 'user-1.0-release.jar'
  9. localpath = r'D:\workspace\csdp201512041\csdp-ningxia\csdp_user\user\target' + os.sep + localFile
  10.  
  11. remotepath = '/csdp/user_launcher-1.0-dev/lib/' + localFile
  12.  
  13. def ftpModuleFile():
  14. t = paramiko.Transport(( serverIp ,22))
  15. t.connect(username = serverUser , password = serverPwd)
  16. sftp = paramiko.SFTPClient.from_transport(t)
  17. # remotepath='/csdp/user_launcher-1.0-dev/user-1.0-release.jar'
  18. # localpath= r'D:\workspace\csdp201512041\csdp-ningxia\csdp_user\user\target\user-1.0-release.jar'
  19. sftp.put(localpath,remotepath)
  20. t.close()
  21. print(":) 成功上传%s文件。" % remotepath)
  22.  
  23. if __name__ == '__main__':
  24. ftpModuleFile()

3) 执行远程linux命令

  1. # -*- coding: utf-8 -*-
  2. import paramiko
  3.  
  4. if __name__ == "__main__":
  5. hostname = '192.168.55.243'
  6. port = 22
  7. username = 'root'
  8. password = 'P@ssw0rd'
  9. cmd = "ps -ef|grep java"
  10.  
  11. ssh = paramiko.SSHClient()
  12. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  13. #ssh.connect( hostname ,22, username , password )
  14. ssh.connect(hostname,username=username,password=password,allow_agent=False,look_for_keys=False)
  15. stdin, stdout, stderr = ssh.exec_command(cmd )
  16. list = stdout.readlines()
  17. print( list )
  18.  
  19. ssh.close()

python之paramiko 远程执行命令的更多相关文章

  1. 使用paramiko远程执行命令、下发文件

    写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义 ...

  2. python 网络编程(远程执行命令与粘包)

    远程执行命令 先来学习一个新模块 , 一会用到的.. 新模块: subprocess 执行系统命令 r = subprocess.Popen('ls',shell=True,stdout=subpro ...

  3. Python学习总结 06 paramiko 远程执行命令

    有时会需要在远程的机器上执行一个命令,并获得其返回结果.对于这种情况,python 可以很容易的实现. 1 工具 Python paramiko 1) Paramiko模块安装 在Linux的Term ...

  4. python实现批量远程执行命令及批量上传下载文件

    #!/usr/bin/env python # -*- coding: utf- -*- # @Time : // : # @Author : xuxuedong # @Site : # @File ...

  5. Python 简单的远程执行命令

    client端执行命令,server端返回命令结果 # server 端 import socket, subprocess sk = socket.socket() address=('127.0. ...

  6. paramiko远程执行命令成功

  7. 【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件

    本文主要介绍paramiko远程执行linux命令,及在服务器上进行文件的上传.下载 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. ...

  8. Python Paramiko实现sftp文件上传下载以及远程执行命令

    一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...

  9. python之实现批量远程执行命令(堡垒机)

    python远程批量执行 我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁. 前段时间一个同学找我一起做一个自动化运维平台,我对pytho ...

随机推荐

  1. Flutter移动电商实战 --(1)项目学习记录

    1.项目相关截图 2.项目知识点梳理图 Dio2.0: Dio是一个强大的 Dart Http 请求库,支持 Restful API.FormData.拦截器.请求取消等操作. Swiper: Swi ...

  2. Twisted框架学习

    Twisted是用Python实现的基于事件驱动的网络引擎框架,是python中一个强大的异步IO库.理解twisted的一个前提是弄清楚twisted中几个核心的概念: reactor, Proto ...

  3. 07 MySQL之视图

    01-视图的含义 视图是从一个或者多个表中导出的,视图的行为与表非常相似,但视图是一个虚拟表.视图还可以从已经存在的视图的基础上定义. 02-创建视图 # 基本语法格式: CREATE [OR REP ...

  4. 几句java代码搞定十万个为什么数据

    最近想做一个app,为小朋友推荐十万个为什么的故事,但是找了很久数据,发现挺难的找的,又去写爬虫,发现没有一个好的网站可以爬,最后一个偶然的机会在csdn上发现一个可用的接口,很快就把问题解决了,下面 ...

  5. vue项目报错:Unexpected tab character (no-tabs)

    eslint意思是检查规范代码 第一种方法: 新建项目的时候 第二种方法: 首先在项目的根目录下.eslintrc.js中加入一行代码:"no-tabs":"off&qu ...

  6. Mac配置React Native开发环境

    一直觉得学习一样东西,不动手怎么也学不会,就像学习swift,看了视频没有动手操作,记住的也就那么点,自己写出东西不是这里有问题就是那里出错. 所以,以后学习自己要多动手. 现在我的学习任务就是: 提 ...

  7. Python3 Selenium自动化web测试 ==> 第二节 页面元素的定位方法 -- iframe专题 <下>

    学习目的: 掌握iframe矿建的定位,因为前端的iframe框架页面元素信息,大多时候都会带有动态ID,无法重复定位. 场景: 1. iframe切换 查看iframe 切换iframe 多个ifr ...

  8. Django:(04)状态保持和验证

    一.Cookie 特点 ​ Cookie是由服务器(网站)生成的,存储在浏览器端的 键值对数据(通常经过加密) 在响应请求时,服务器会把生成 Cookie数据 发给浏览器,浏览器会自动保存 (前提:浏 ...

  9. STS中MyBatis的基本实现

    本文采用的是<深浅spring boot 2.x>中第5章的例子,用一个接口实现对一个表项的读取. 数据库:mysql下建立user数据库,表名为t_usr 1. 数据源设置 在appli ...

  10. 【18.065】Lecture2

    由于这一课的教材放出来了,所以直接将整个pdf放上来.