python fabric shell登录

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="[email protected]:22"
a177="[email protected]:22"
a247="[email protected]: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="[email protected]:22"
#env.gateway="[email protected]: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这个函数了,细细体会挺有意思的。

实现展现:

  • 直接登录服务器

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

你可能感兴趣的:(python)