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="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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值