利用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 28 Python
使用Python实现简单的服务器功能
Aug 25 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
Python文本特征抽取与向量化算法学习
Dec 22 Python
Python解决走迷宫问题算法示例
Jul 27 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
Python partial函数原理及用法解析
Dec 11 Python
pycharm快捷键汇总
Feb 14 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
python使用smtplib模块发送邮件
Dec 17 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 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
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
php中strtotime函数用法详解
2014/11/15 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
关于laravel 子查询 & join的使用
2019/10/16 PHP
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
Python操作列表之List.insert()方法的使用
2015/05/20 Python
numpy自动生成数组详解
2017/12/15 Python
深入理解Django的中间件middleware
2018/03/14 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Python csv模块使用方法代码实例
2019/08/29 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
什么是Python变量作用域
2020/06/03 Python
巴西在线鞋店:Shoestock
2017/10/28 全球购物
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
马丁路德金演讲稿
2014/05/19 职场文书
英文求职信范文
2014/05/23 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
个人自查自纠材料
2014/10/14 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
党章学习心得体会2016
2016/01/14 职场文书
java项目构建Gradle的使用教程
2022/03/24 Java/Android
Django框架之路由用法
2022/06/10 Python