利用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 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
Python实现进程同步和通信的方法
Jan 02 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
python爬虫容易学吗
Jun 02 Python
Python初识逻辑与if语句及用法大全
Aug 07 Python
python flappy bird小游戏分步实现流程
Feb 15 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
讲解vue-router之什么是动态路由
2018/05/28 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python实现的选择排序算法示例
2017/11/29 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
python爬虫添加请求头代码实例
2019/12/28 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
智能旅行箱:Horizn Studios
2018/04/30 全球购物
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
生日宴会主持词
2014/03/20 职场文书
安全生产责任书范本
2014/04/15 职场文书
小学捐书活动总结
2014/07/05 职场文书
毕业生实习证明
2014/09/19 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
Java 定时任务技术趋势简介
2022/05/04 Java/Android