fabric执行服务器命令

fabric最重要的功能是可以执行远程机器的命令,例如执行远程命令,发布程序。

可能有的同学会说,登录远程服务器,执行命令,也可以啊?是可以的,但是如果经常这样做,很麻烦,因为,不能自动化,而且需要每次都点击界面去连接远程服务器,其实是很繁琐的。

通过run命令,可以执行远程方法,首先需要导入from fabric.api import run这个库。

run.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from fabric.api import run

#定义一个任务函数,通过run方法实现远程执行‘uname -s’命令
def host_type():
    run('uname -s')

执行:

fab -f run.py host_type

由于是要在远程执行命令,fab发现文件中有run函数后,会试图连接远程服务器,如果无法连接,会提示你输入远程服务器的地址,用户名,密码,如下:

No hosts found. Please specify (single) host string for connection: 

配置远程主机用户名,密码

你需要输入用户名、密码才行,比价麻烦,所以,可以把远程机器的信息写在文件里,如下:

run2.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from fabric.api import *

env.user = 'root'
env.hosts = ['118.100.100.2']
env.port = '22'
env.password = 'abc123'

#定义一个任务函数,通过run方法实现远程执行‘uname -s’命令
def host_type():
    run('uname -s')

将用户名,密码等放在env环境变量中,这样当运行run的时候,就可以用这个用户名,密码登录了。

执行

fab -f run2.py host_type

执行结果

[192.168.196.142] run: uname -s
[192.168.196.142] out: Linux
[192.168.196.142] out: 


Done.
Disconnecting from 192.168.196.142:224... done.

注意,如果上面的密码错误,程序会提示你继续输入正确的密码,非常人性化。

##