利用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 10 Python
python操作MongoDB基础知识
Nov 01 Python
django 自定义用户user模型的三种方法
Nov 18 Python
Python通过future处理并发问题
Oct 17 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
python中while和for的区别总结
Jun 28 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
Python类class参数self原理解析
Nov 19 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 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
极典R601SW收音机
2021/03/02 无线电
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
JS 事件绑定函数代码
2010/04/28 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
通过Pandas读取大文件的实例
2018/06/07 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
大学生水果店创业计划书
2014/01/28 职场文书
高校教师自荐信范文
2014/03/13 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
Nginx四层负载均衡的配置指南
2021/06/11 Servers
总结Java对象被序列化的两种方法
2021/06/30 Java/Android