fabric是一个python(2.7,3.4+)的库,用来经过SSH远程执行shell命令,并返回有用的python对象。
它创建在“invoke”和“paramiko”库之上,同时扩展了他们的API以提供更多的功能。html
fabric的Connection方法继承自INVOKE,实现对单个主机的SSh链接,返回一个该主机的链接对象。经过该对象,对主机进行操做和管理。python
下面来看一下connectin方法参数。web
def __init__( self, host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None, ):
user@host
, host:port
, user@host:port
下面是一个简单例子:shell
from fabric import Connection con = Connection(host='xxx.xxx.xxx.xxx', user='root', connect_kwargs={'password': '***'}) print(con) >> <Connection host=xxx.xxx.xxx.xxx user=root>
goup是一个部分抽象类,须要经过具象的子类(SerialGroup或者ThreadingGroup)来使用,不然python会抛出一个NotImplimentError。api
不少状况下,咱们须要同时操做多台服务器。最直接的办法天然是经过迭代的方法遍历整个主机列表。服务器
>>> from fabric import Connection >>> for host in ('web1', 'web2', 'mac1'): >>> result = Connection(host).run('uname -s') ... print("{}: {}".format(host, result.stdout.strip())) ... web1: Linux web2: Linux mac1: Darwin
但有些时候会想将全部的主机链接合并在一个对象当中,这就须要SerialGroup这样的子类。ssh
>>> from fabric import SerialGroup as Group >>> results = Group('web1', 'web2', 'mac1').run('uname -s') >>> print(results) <GroupResult: { <Connection 'web1'>: <CommandResult 'uname -s'>, <Connection 'web2'>: <CommandResult 'uname -s'>, <Connection 'mac1'>: <CommandResult 'uname -s'>, }>
group方法和Connection在参数上有不少不一样。spa
class fabric.group.Group(*hosts, **kwargs)
user@host
, host:port
,user@host:port
速写方式。group = SerialGroup( "host1", "host2", "host3", user="admin", forward_agent=True, )
执行shell命令,经过invoke.runners.Runner.run来实现。代理
run(command, **kwargs)
run的结果返回一个resul的实例。code
这个实例在group和Connection之间不尽相同。
>>> from fabric import SerialGroup as Group >>> results = Group('web1', 'web2', 'mac1').run('uname -s') >>> print(results) <GroupResult: { <Connection 'web1'>: <CommandResult 'uname -s'>, <Connection 'web2'>: <CommandResult 'uname -s'>, <Connection 'mac1'>: <CommandResult 'uname -s'>, }> >>> for connection, result in results.items(): ... print("{0.host}: {1.stdout}".format(connection, result)) ... ... web1: Linux web2: Linux mac1: Darwin
group获得一个字典;connection获得一个单个数据。