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

1 、工具

Python paramiko

1) Paramiko模块安装

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

2)确定paramiko安装成功

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

2、步骤

1 、导入 paramiko 模块

#!/usr/bin/python
import paramiko

2 、创建 ssh 连接函数

def ssh_connect( _host, _username, _password ):
try:
_ssh_fd = paramiko.SSHClient()
_ssh_fd.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
_ssh_fd.connect( _host, username = _username, password = _password )
except Exception, e:
print( 'ssh %s@%s: %s' % (_username, _host, e) )
exit()
return _ssh_fd

3、 创建命令执行函数

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

4 、创建关闭 ssh 函数

def ssh_close( _ssh_fd ):
_ssh_fd.close()

5、使用示例

def main():
hostname = '192.168.1.46'
port = 22
username = 'root'
password = 'P@ssw0rd'
cmd = "ip a" sshd = ssh_connect( hostname , username , password )
stdin, stdout, stderr = ssh_exec_cmd( sshd, cmd )
err_list = stderr.readlines() if len( err_list ) > 0:
print 'ERROR:' + err_list[0]
exit() for item in stdout.readlines():
print item,
ssh_close( sshd ) if __name__ == "__main__":
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) 启动模块

# -*- coding: utf-8 -*-

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.222', username = 'root', password = 'P@ssw0rd', timeout = 5)
cmd = 'nohup /csdp/charge_launcher-1.0-release/bin/run.sh > /csdp/charge_launcher-1.0-release/bin/nohup.out 2>&1 & \r\n' password= 'P@ssw0rd' stdin, stdout, stderr = ssh.exec_command( cmd )
##stdin, stdout, stderr = ssh.exec_command('sudo -S %s\n' % cmd )
##stdin.write('%s\r\n' % password)
##stdin.flush()
print "------------------------"
##print stdout.readlines()
##print stderr.read() print "------------------------"
cmd = 'pwd'
stdin, stdout, stderr = ssh.exec_command(cmd )
print stdout.readlines() ssh.close()

2) 远程上传文件

# -*- coding: utf-8 -*-
import paramiko serverIp = '192.168.55.243'
serverUser = 'root'
serverPwd = 'P@ssw0rd' localFile = 'user-1.0-release.jar'
localpath = r'D:\workspace\csdp201512041\csdp-ningxia\csdp_user\user\target' + os.sep + localFile remotepath = '/csdp/user_launcher-1.0-dev/lib/' + localFile def ftpModuleFile():
t = paramiko.Transport(( serverIp ,22))
t.connect(username = serverUser , password = serverPwd)
sftp = paramiko.SFTPClient.from_transport(t)
# remotepath='/csdp/user_launcher-1.0-dev/user-1.0-release.jar'
# localpath= r'D:\workspace\csdp201512041\csdp-ningxia\csdp_user\user\target\user-1.0-release.jar'
sftp.put(localpath,remotepath)
t.close()
print(":) 成功上传%s文件。" % remotepath) if __name__ == '__main__':
ftpModuleFile()

3) 执行远程linux命令

# -*- coding: utf-8 -*-
import paramiko if __name__ == "__main__":
hostname = '192.168.55.243'
port = 22
username = 'root'
password = 'P@ssw0rd'
cmd = "ps -ef|grep java" ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#ssh.connect( hostname ,22, username , password )
ssh.connect(hostname,username=username,password=password,allow_agent=False,look_for_keys=False)
stdin, stdout, stderr = ssh.exec_command(cmd )
list = stdout.readlines()
print( list ) 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. adb命令连接Android模拟器夜神模拟器

    1.打开夜神模拟器,打开设置,调成手机模式,初次进入的话,进入设置 - 关于平板电脑 - 版本号,点击版本号5次,可以激活使用开发者模式:打开设置 -> 开发者选项 -> USB调试, 打 ...

  2. LeetCode 200. 岛屿的个数(Number of Islands)

    题目描述 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1 ...

  3. Android-Glide使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Li_Qing_Xue/article/details/78919499 图片加载很是重要,我也对比过 ...

  4. easyUI之numberspinner数字微调框

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  5. Android之SharedPreference存储数据

    *路径: /data/data/包名/shared_prefs/ * 以Xml文件存储数据 * 编写步骤 // 1. 获取sp SharedPreferences sp = this.getShare ...

  6. 保存图片控件上的图片到本地 出现错误:无法将类型为“System.Windows.Media.Imaging.BitmapFrameDecode”的对象强制转换为类型“System.Windows.Media.Imaging.BitmapImage”。

    保存图片控件上的图片到本地 出现错误:无法将类型为“System.Windows.Media.Imaging.BitmapFrameDecode”的对象强制转换为类型“System.Windows.M ...

  7. Rancher Server部署方式及Rancher HA环境部署

    类似Rancher这种的容器管理和编排工具,它可以很快地让每个组织获得高效的弹性集群管理能力.当前技术世界的发展形势就是让开发人员从繁琐的应用配置和管理中解放出来,使用容器镜像来处理复杂的程序运行依赖 ...

  8. Linux下通过crontab命令来实现定时任务

    一.crond的介绍 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cr ...

  9. 树莓派实现摄像头监控(使用motion和mjpg-streamer)

    购买raspBerryCarmen,大概20元, 启动树莓派,安装: `sudo apt install motion` 配置/etc/motion/motion.conf, `sudo vim /e ...

  10. express服务端

    1. 使用 Node.js + Express 开发服务端 2. 使用 Node.js + Express+MySQL 实现简单的增删改查 3. 初识NodeJS服务端开发(Express+MySQL ...