利用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 相关文章推荐
在Mac OS上搭建Python的开发环境
Dec 24 Python
利用python求相邻数的方法示例
Aug 18 Python
Python加载带有注释的Json文件实例
May 23 Python
使用 Python 处理 JSON 格式的数据
Jul 22 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
python剪切视频与合并视频的实现
Mar 03 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
Python连接Impala实现步骤解析
Aug 04 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
python 爬取小说并下载的示例
Dec 07 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中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
javascript验证身份证号
2015/03/03 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
js获取url传值的方法
2015/12/18 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
python实现自动登录
2018/09/17 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
异常和异常类的概念
2014/09/12 面试题
介绍一下Ruby的特点
2013/01/20 面试题
Ruby如何进行文件操作
2014/07/17 面试题
大学生家政服务项目创业计划书
2014/01/30 职场文书
市场部管理制度
2014/02/02 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
作风大整顿心得体会
2014/09/10 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
婚姻出轨保证书
2015/05/08 职场文书
开学典礼观后感
2015/06/15 职场文书