利用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的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
解决python 自动安装缺少模块的问题
Oct 22 Python
如何在Cloud Studio上执行Python代码?
Aug 09 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
详解Python中第三方库Faker
Sep 25 Python
python 读取串口数据的示例
Nov 09 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
Aug 30 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中利用post传递字符串重定向的实现代码
2011/04/21 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
js获取内联样式的方法
2015/01/27 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
python实现AES加密和解密
2019/03/27 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
python实例化对象的具体方法
2020/06/17 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
应届生服务员求职信
2013/10/31 职场文书
库房主管岗位职责
2013/12/31 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
服务口号大全
2014/06/11 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书