利用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算法学习之基数排序实例
Dec 18 Python
Python使用MONGODB入门实例
May 11 Python
python 计算两个日期相差多少个月实例代码
May 24 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
python pandas时序处理相关功能详解
Jul 03 Python
django 消息框架 message使用详解
Jul 22 Python
python实现名片管理器的示例代码
Dec 17 Python
Python yield生成器和return对比代码实例
Apr 20 Python
OpenCV-Python实现轮廓的特征值
Jun 09 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&mysql(三)
2006/10/09 PHP
php for 循环语句使用方法详细说明
2010/05/09 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
《Python学习手册》学习总结
2018/01/17 Python
Python面向对象之继承代码详解
2018/01/29 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
python中p-value的实现方式
2019/12/16 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
用python写爬虫简单吗
2020/07/28 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
煤矿安全承诺书
2014/05/22 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
外国人来华邀请函
2015/01/31 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
JS的深浅复制详细
2021/10/16 Javascript
css3带你实现3D转换效果
2022/02/24 HTML / CSS
nginx搭建NFS网络文件系统
2022/04/14 Servers