connection¶
-
class
fabric.connection.Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None)¶ 到ssh守护进程的连接,具有用于命令和文件传输的方法。
基础
此类继承自调用的
Context,因为它是命令、任务等可以在其中操作的上下文。它还封装了一个ParamikoSSHClient实例,使用它执行有用的高级操作SSHClient和Channel从中生成的实例。生命周期
Connection有一个基本的“create,do work,disconnect/close生命周期:Instantiation用连接参数压印对象(但是 not 实际启动网络连接)。- 存在用户的备用构造函数 upgrading piecemeal from Fabric 1 :
from_v1
- 存在用户的备用构造函数 upgrading piecemeal from Fabric 1 :
方法如
run,getETC自动触发调用open如果连接未处于活动状态,用户当然可以调用open如果需要,手动操作。连接并不总是需要显式地关闭;很多时候,paramiko的垃圾收集挂钩或python自己的关闭序列会处理这些问题。 然而 ,如果遇到边缘情况(例如,退出时挂起的会话),在处理完连接后显式关闭连接会很有帮助。
这可以通过手动调用
close或将对象用作ContextManager::with Connection('host') as c: c.run('command') c.put('file')
注解
这个班重播
invoke.context.Context.run到local因此远程和本地命令执行都可以共存。配置
大多数
Connection参数荣誉 Invoke-style configuration 以及任何适用的 SSH config file directives . 例如,以连接到admin@myhost一个可以:- 使用任何内置配置机制,例如
/etc/fabric.yml,~/.fabric.json,集合驱动的配置,env vars等,声明user: admin(或){{"user": "admin"}},取决于配置格式。)然后Connection('myhost')会隐式地user属于admin. - 使用包含
User admin在任何适用范围内Host页眉 (Host myhost,Host *等)Connection('myhost')将默认为admin用户。 - 利用主机参数速记(如中所述
Config.__init__)Connection('admin@myhost'). - 直接给出参数:
Connection('myhost', user='admin').
这同样适用于代理转发、网关等。
2.0 新版功能.
-
__eq__(other)¶ 返回self==值。
-
__hash__()¶ 返回哈希(self)。
-
__init__(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None)¶ 设置表示服务器连接的新对象。
参数: - host (str) -- 此连接的主机名(或IP地址)。可能包括
userand/orportparameters, of the formuser@host,host:port, oruser@host:port. .. note:: Due to ambiguity, IPv6 host addresses are incompatible with thehost:portshorthand (thoughuser@hostwill still work OK). In other words, the presence of >1:character will prevent any attempt to derive a shorthand port number; use the explicit `` 端口``参数。…注:如果host匹配AHost加载的ssh配置数据中的子句,以及Host子句包含Hostname指令,结果Connection对象将表现为host等于那个Hostname价值。在所有情况下,host保存为original_host属性。因此,给定ssh config-like so::host myalias hostname realhostname调用likeConnection(host='myalias')将导致一个对象host属性是realhostname和谁的original_host属性是myalias. - user (str) -- 远程连接的登录用户。默认为
config.user. - port (int) -- 远程端口。默认为
config.port. - config -- 对其执行方法时要使用的配置设置
Connection(例如,默认的ssh端口等)。应该是Config或invoke.config.Config(将变成Config)默认为匿名Config对象。 - gateway -- 用作此连接的代理或网关的对象。此参数接受下列参数之一:-另一个
Connection(为了ProxyJump样式网关);—shell命令字符串(用于ProxyCommand样式样式网关)。违约:None,表示不会发生网关(除非另有配置;如果要在运行时覆盖已配置的网关,请指定gateway=False…)参阅: ssh连接网关 - forward_agent (bool) -- 是否启用ssh代理转发。违约:
config.forward_agent. - connect_timeout (int) -- 连接超时,以秒为单位。违约:
config.timeouts.connect. - connect_kwargs (dict) -- 关键字参数逐字传递给
SSHClient.connect(什么时候open被称为。Connection尝试不增加其自身的附加设置/kwarg,除非它正在增加某种价值;因此,connect_kwargs当前是提交参数的正确位置,例如pkey或key_filename. 违约:config.connect_kwargs. - inline_ssh_env (bool) -- 是否将环境变量“inline”作为前缀发送到命令字符串前面 (
export VARNAME=value && mycommand here,而不是尝试通过ssh协议本身提交它们(这是默认行为)。如果远程服务器的AcceptEnv设置(这是常见的默认设置)。默认值是inline_ssh_envconfiguration value (默认为False)…警告::此功能可以 not 当前代表您执行任何shell转义!使用非平凡值时要小心,并注意,如果需要,您可以放入自己的引用、反斜杠等。如果在这里遇到太多问题,请考虑使用不同的方法(例如实际的远程shell脚本)。…注意::序列化为前缀时FOO=bar格式,我们应用内置sorted函数设置为env字典的键,以删除不明确/任意排序的内容。…注意:此设置与 地方的 shell命令;它只影响远程命令,因此run和sudo.
引发: ValueError -- 如果用户或端口值通过
host速记 and 他们自己的论点。(我们 refuse the temptation to guess )在 2.3 版更改: 增加了
inline_ssh_env参数。- host (str) -- 此连接的主机名(或IP地址)。可能包括
-
__lt__(other)¶ 返回self<value。
-
__repr__()¶ 返回repr(self)。
-
close()¶ 如果打开,请终止到远程端的网络连接。
如果没有打开的连接,则此方法不起任何作用。
2.0 新版功能.
-
connect_timeout= None¶ 连接超时
-
forward_agent= None¶ 是否启用代理转发。
-
forward_local(local_port, remote_port=None, remote_host='localhost', local_host='localhost')¶ 打开连接隧道
local_port到服务器的环境。例如,假设您想连接到一个远程PostgreSQL数据库,该数据库被锁定,只能通过运行它的系统访问。您可以通过ssh访问此服务器,因此可以临时使本地系统上的端口5432与服务器上的端口5432类似:
import psycopg2 from fabric import Connection with Connection('my-db-server').forward_local(5432): db = psycopg2.connect( host='localhost', port=5432, database='mydb' ) # Do things with 'db' here
此方法类似于使用
-Lopenssh的选项ssh程序。参数: - local_port (int) -- 要侦听的本地端口号。
- remote_port (int) -- 远程端口号。默认值与
local_port. - local_host (str) -- 要侦听的本地主机名/接口。违约:
localhost. - remote_host (str) -- 为转发的远程端口提供服务的远程主机名。违约:
localhost(即,主持人Connection已连接到。)
返回: 没有;此方法仅用作影响本地操作系统状态的上下文管理器。
2.0 新版功能.
-
forward_remote(remote_port, local_port=None, remote_host='127.0.0.1', local_host='localhost')¶ 打开连接隧道
remote_port对当地环境。例如,假设您在8080端口的工作站上以开发模式运行一个守护进程,并希望从生产环境或登台环境向其输送流量。
在大多数情况下,这是不可能的,因为您的办公室/家庭网络可能会阻止入站流量。但是您可以通过ssh访问此服务器,因此可以临时使该服务器上的端口8080与工作站上的端口8080类似:
from fabric import Connection c = Connection('my-remote-server') with c.forward_remote(8080): c.run("remote-data-writer --port 8080") # Assuming remote-data-writer runs until interrupted, this will # stay open until you Ctrl-C...
此方法类似于使用
-Ropenssh的选项ssh程序。参数: 返回: 没有;此方法仅用作影响本地操作系统状态的上下文管理器。
2.0 新版功能.
-
classmethod
from_v1(env, **kwargs)¶ 使用结构1的备用构造函数
env听写设置。除此之外的所有关键字参数
env是以不受干扰的方式传递给主构造函数的。警告
因为您自己的配置覆盖将从
env,确保只设置值 打算 改变你的v1环境!详细说明
envvar是导入的,它们在新的API中会变成什么,请参见 v1-env-var-imports .参数: env -- 显式结构1 env口述(技术上,任何fabric.utils._AttributeDict实例应该可以)从中提取配置。2.4 新版功能.
-
gateway= None¶ 网关
Connection或ProxyCommand要使用的字符串(如果有)。
-
get(*args, **kwargs)¶ 将远程文件获取到本地文件系统或类似文件的对象。
只是一个包装
Transfer.get. 有关详细信息,请参阅其文档。2.0 新版功能.
-
host= None¶ 目标服务器的主机名。
-
inline_ssh_env= None¶ 是否使用前缀为inline的env vars构造远程命令行。
-
is_connected¶ 此连接是否实际打开。
2.0 新版功能.
-
local(*args, **kwargs)¶ 在本地系统上执行shell命令。
此方法实际上是
invoke.run;有关详细信息和呼叫签名,请参阅其文档。2.0 新版功能.
-
open()¶ 启动与此对象绑定到的主机/端口的ssh连接。
这可能包括激活配置的网关连接(如果设置了网关连接)。
此外,还保存了一个到现在设置的传输对象的句柄,以便于访问。
各种连接时间设置(和/或其对应的 SSH config options )在呼叫中使用
SSHClient.connect. (有关详细信息,请参见 the configuration docs )2.0 新版功能.
-
open_gateway()¶ 从获取类似套接字的对象
gateway.返回: A direct-tcpipparamiko.channel.Channel如果gateway是一个Connection;或ProxyCommand如果gateway是一个字符串。2.0 新版功能.
-
port= None¶ 要连接的网络端口。
-
put(*args, **kwargs)¶ 将远程文件(或类似文件的对象)放入远程文件系统。
只是一个包装
Transfer.put. 有关详细信息,请参阅其文档。2.0 新版功能.
-
run(command, **kwargs)¶ 在此连接的远程端执行shell命令。
此方法包装了支持ssh的
invoke.runners.Runner.run;有关详细信息,请参阅其文档。警告
结构偏离调用的默认设置/行为的地方有几个;它们记录在
Config.global_defaults.2.0 新版功能.
-
sftp()¶ 返回A
SFTPClient对象。如果调用不止一次,则记忆第一个结果;因此,任何给定的
Connection实例将只具有一个sftp客户机和状态(例如由chdir)将被保存。2.0 新版功能.
-
ssh_config= None¶ 每个主机的ssh配置数据(如果有)。(见 装载和使用 ssh_config 文件夹 )
-
sudo(command, **kwargs)¶ 执行shell命令,通过
sudo,在远端。此方法与
invoke.context.Context.sudo从各个方面来说,除了这个——比如run--除了通用/全局配置覆盖之外,它还支持每个主机/每个连接配置覆盖。因此,例如,可以配置每个主机的sudo密码。2.0 新版功能.
-
transport= None¶ 返回值的便利句柄
self.client.get_transport().
-
user= None¶ 此连接将用于连接到远程端的用户名。