利用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实现爬虫下载漫画示例
Feb 16 Python
python实现下载文件的三种方法
Feb 09 Python
Python获取指定文件夹下的文件名的方法
Feb 06 Python
在Pycharm terminal中字体大小设置的方法
Jan 16 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
python实现用户名密码校验
Mar 18 Python
python用什么编辑器进行项目开发
Jun 17 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 Python
python opencv实现图像配准与比较
Feb 09 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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通用防注入程序 推荐
2011/02/26 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
跟老齐学Python之总结参数的传递
2014/10/10 Python
十个Python程序员易犯的错误
2015/12/15 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
利用Python检测URL状态
2019/07/31 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
酒后驾驶检讨书
2014/01/27 职场文书
前台岗位职责
2015/02/13 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
解析MySQL binlog
2021/06/11 MySQL