利用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 Django模板的使用方法(图文)
Nov 04 Python
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
Python中最大最小赋值小技巧(分享)
Dec 23 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
Mar 30 Python
python获取系统内存占用信息的实例方法
Jul 17 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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也可以?成Shell Script
2006/10/09 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
修复IE9&safari 的sort方法
2011/10/21 Javascript
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
公司文体活动总结
2015/05/07 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
Java的Object类的九种方法
2022/04/13 Java/Android
MySQL批量更新不同表中的数据
2022/05/11 MySQL