利用python 更新ssh 远程代码 操作远程服务器的实现代码


Posted in Python onFebruary 08, 2018

用python paramiko ssh 服务器,并pull对应目录代码的脚本

pull.py

import paramiko
import sys

def sshclient_execmd(hostname, port, username, password, execmd):
  paramiko.util.log_to_file("paramiko.log")

  s = paramiko.SSHClient()
  s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  if(port==0):
    s.connect(hostname=hostname, username=username, password=password)
  else:
    s.connect(hostname=hostname, port=port, username=username, password=password)
  stdin, stdout, stderr = s.exec_command(execmd)
  stdin.write("Y") # Generally speaking, the first connection, need a simple interaction.

  print stdout.read()

  s.close()


def main(server,project):
# def main():
  server_list = {'2108':{'hostname':'112.22.22.22','username':'root','password':'123456','port':2108},
         '11':{'hostname':'192.168.1.11','username':'root','password':'123456','port':0}
          }

  if(server == '118'):
    execmd = "cd /workspace/" + project + "/ && git pull"
    info = os.popen(execmd).read()  # 这里是更新本地的,可以返回打印出cmd 的回显结果
    print info

  up_list = server_list[server]
  hostname = up_list['hostname']
  port = up_list['port']
  username = up_list['username']
  password = up_list['password']

  execmd = "cd /workspace/" + project +  "/ && git pull"
  sshclient_execmd(hostname, port, username, password, execmd)


if __name__ == "__main__":
  server = str(sys.argv[1])
  project = str(sys.argv[2])
  main(server,project)

上面的是更新远程 服务器上 project 目录pull 的源码。

/workspace/" + project + "/ && git pull

比如运行 `python pull.py 2108 web ` 就会 用 paramiko.SSHClient, 来连接 配置于 main 函数中的 server_list list 中的 2108 的 hostnameusernamepasswordport 参数,连接服务器后,执行 execmd 中配置好的命令。这里我用了argv 获取输入的参数,来控制要更新的项目路径。这样一个利用python ssh 远程服务器,并更新对应目录代码的脚本就完成了。

这里我配置了两个服务器,11这个服务器,没有使用到 port ,所以我做了判断,来控制连接中是否带 port 参数,不然会报错。

if(port==0):

这里注意,如果是第一次执行 需要接受 author_key 缓存,还需要注意 是否有更新权限

python使用ssh连接远程服务器,并执行命令代码

下面的代码使用pexpect生成一个ssh进程,然后连接远程服务器,并执行命令。
在使用下面程序之前,需要先通过easy_install pexpect安装pexpect程序。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pexpect

def ssh_cmd(ip, passwd, cmd):
  ret = -1
  ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
  try:
    i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
    if i == 0 :
      ssh.sendline(passwd)
    elif i == 1:
      ssh.sendline('yes\n')
      ssh.expect('password: ')
      ssh.sendline(passwd)
    ssh.sendline(cmd)
    r = ssh.read()
    print r
    ret = 0
  except pexpect.EOF:
    print "EOF"
    ssh.close()
    ret = -1
  except pexpect.TIMEOUT:
    print "TIMEOUT"
    ssh.close()
    ret = -2
  return ret

到这里就结束了,大家可以参考一下,方法有很多种

Python 相关文章推荐
Python中列表、字典、元组、集合数据结构整理
Nov 20 Python
python实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
python opencv实现图像边缘检测
Apr 29 Python
python打包exe开机自动启动的实例(windows)
Jun 28 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
Django模型中字段属性choice使用说明
Mar 30 Python
pandas map(),apply(),applymap()区别解析
Feb 24 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 #Python
django数据库migrate失败的解决方法解析
Feb 08 #Python
python使用锁访问共享变量实例解析
Feb 08 #Python
Python异常对代码运行性能的影响实例解析
Feb 08 #Python
Python科学计算包numpy用法实例详解
Feb 08 #Python
Python多进程并发与多线程并发编程实例总结
Feb 08 #Python
Python的CGIHTTPServer交互实现详解
Feb 08 #Python
You might like
小谈php正则提取图片地址
2014/03/27 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
2018/05/12 PHP
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
Vue2单一事件管理组件通信
2017/05/09 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
React实现todolist功能
2020/12/28 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
python迭代dict的key和value的方法
2018/07/06 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
2019年.net常见面试问题
2012/02/12 面试题
学生就业推荐信
2013/11/13 职场文书
考试退步检讨书
2014/01/15 职场文书
儿童生日会策划方案
2014/05/15 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
2014年幼师工作总结
2014/11/22 职场文书
2015年个人思想总结
2015/03/09 职场文书