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这个函数了,细细体会挺有意思的。
实现展现:
直接登录服务器
直接登录服务器-并执行命令