fabric对于系统工程师来说,可以积累我们的命令,让我们不再重复的每次输入命令啥的,但是也许fabric还能完成另外的任务,就是直接登录服务器。

详细说,如下几点:
1. 直接登录服务器,避免我们手动输入密码(也许可以跨过跳板机)
2. 直接登录服务器并执行命令(可以单机,可以多机同时)

代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
from fabric.contrib.files import *
from fabric.contrib.project import rsync_project
import fabric.operations
import time,os
import logging
import base64
from getpass import getpass

# 如果需要打印log,取消下行的注释
#logging.basicConfig(level=logging.DEBUG)

# 定义三台服务器
a166="root@192.168.0.16:22"
a177="root@192.168.0.17:22"
a247="root@192.168.0.24:22"

# 定义三台服务器的密码
env.passwords = {
  a16:'123',
  a17:'123',
  a24:'123'
}

# 定义一些环境变量,没有也无所谓,小细节
env.sdir="/data/soft/soft/"
env.disable_known_hosts=True
env.abort_on_prompts=True
env.skip_bad_hosts = True
env.remote_interupt = True
env.warn_only = True
env.eagerly_disconnect = True
env.gateway="root@192.168.0.16:22"
#env.gateway="root@192.168.0.17:22"
#env.parallel=10

@task
def shell(cmd=None):
  myhost=eval(env.host)
  env.host_string=myhost
  env.password=env.passwords[myhost]
  if cmd is None:
    print "即将登陆服务器: %s"%(env.host_string)
    fabric.operations.open_shell()
  else:
    print "即将在服务器执行命令: %s"%(env.host_string)
    run(cmd)

上面代码中,最最重要的就是shell这个函数了,细细体会挺有意思的。

实现展现:

  • 直接登录服务器
    mark

  • 直接登录服务器-并执行命令
    mark

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐