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
,get
ETC自动触发调用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地址)。可能包括
user
and/orport
parameters, of the formuser@host
,host:port
, oruser@host:port
. .. note:: Due to ambiguity, IPv6 host addresses are incompatible with thehost:port
shorthand (thoughuser@host
will 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_env
configuration 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
此方法类似于使用
-L
openssh的选项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...
此方法类似于使用
-R
openssh的选项ssh
程序。参数: 返回: 没有;此方法仅用作影响本地操作系统状态的上下文管理器。
2.0 新版功能.
-
classmethod
from_v1
(env, **kwargs)¶ 使用结构1的备用构造函数
env
听写设置。除此之外的所有关键字参数
env
是以不受干扰的方式传递给主构造函数的。警告
因为您自己的配置覆盖将从
env
,确保只设置值 打算 改变你的v1环境!详细说明
env
var是导入的,它们在新的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-tcpip
paramiko.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¶ 此连接将用于连接到远程端的用户名。