利用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 26 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
Python实现两款计算器功能示例
Dec 19 Python
pip install urllib2不能安装的解决方法
Jun 12 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
Dec 19 Python
使用Python爬取弹出窗口信息的实例
Mar 14 Python
python操作toml文件的示例代码
Nov 27 Python
Python中Permission denied的解决方案
Apr 02 Python
python中%格式表达式实例用法
Jun 18 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
2016/09/27 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
python画双y轴图像的示例代码
2019/07/07 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
日本无添加化妆品:HABA
2016/08/18 全球购物
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
公共事业管理本科生求职信
2013/10/07 职场文书
《桥》教学反思
2014/04/09 职场文书
政风行风评议整改方案
2014/09/15 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python