阿小信大人的头像
Where there is a Python, there is a way. 阿小信大人

Fabric批量执行远程服务器命令2014-09-02 06:54

Fabric 是基于 SSH 协议的服务器批量管理工具

安装fabric:

sudo pip install fabric

编写测试脚本:

from fabric.api import run
def hello(name="AK"):
    print "hello %s"%name

def host_name():
    run('hostname')

保存文件名为:fabfile.py,这样使用fab命令时会自动找到里面的函数,否则要用-f参数指定脚本位置。

运行:

ashin@ubuntu:~/code$ fab  -l
Available commands:

    hello
    host_name

ashin@ubuntu:~/code$ fab hello
hello AK

Done.
ashin@ubuntu:~/code$ fab hello:name=dj
hello dj

Done.
ashin@ubuntu:~/code$ fab -H ashin@192.168.1.122 host_name
[ashin@192.168.1.122] Executing task 'host_name'
[ashin@192.168.1.122] run: hostname
[ashin@192.168.1.122] Login password for 'ashin': 
[ashin@192.168.1.122] out: ubuntu-vbox
[ashin@192.168.1.122] out:


Done.
Disconnecting from 192.168.1.122... done.

如果报错:

Fatal error: Low level socket error connecting to host 127.0.0.1 on port 22: Connection refused

确定是否安装了sshserver,安装命令:

sudo apt-get install openssh-server

远程执行命令时需要输入登录密码,配置免密码ssh登录:http://ashin.sinaapp.com/article/92/

也可以在代码中配置:

from fabric.api import run
from fabric.api import env

env.user = 'ashin'
env.password = 'ashin'
env.hosts = ['127.0.0.1', '192.168.1.122']

def host_name():
    run('hostname')

运行:

ashin@ubuntu:~/code$ fab host_name
[127.0.0.1] Executing task 'host_name'
[127.0.0.1] run: hostname
[127.0.0.1] out: ubuntu
[127.0.0.1] out:

[192.168.1.122] Executing task 'host_name'
[192.168.1.122] run: hostname
[192.168.1.122] out: ubuntu-vbox
[192.168.1.122] out:


Done.
Disconnecting from 192.168.1.122... done.
Disconnecting from 127.0.0.1... done.

fabric提供的api:

api.abort          api.local          api.quiet          api.shell_env
api.cd             api.open_shell     api.reboot         api.show
api.env            api.output         api.remote_tunnel  api.sudo
api.execute        api.parallel       api.require        api.task
api.fastprint      api.path           api.roles          api.warn
api.get            api.prefix         api.run            api.warn_only
api.hide           api.prompt         api.runs_once      api.with_settings
api.hosts          api.put            api.serial         
api.lcd            api.puts           api.settings

参考:http://chenxiaoyu.org/2012/08/30/deploy-with-fabric.html

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#  
分享到:
阅读[2611] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

网友54.*.*.35[火星]2018-07-23 19:24
网友46.*.*.85[火星]2018-07-23 19:19
网友220.*.*.167[北京]2018-07-23 19:15
网友66.*.*.73[美国]2018-07-23 19:11

发表评论