Python Fabric ssh 配置解讀
2.4簡介:
Fabric is a high level Python (2.7, 3.4+) library designed to execute shell commands remotely over SSH, yielding useful Python objects in return.
簡單說就是一個基於 ssh 執行遠端 shell 命令返回一個 python 物件的一個 python 庫。
Fabric 的大部分配置都是對 ssh 的配置, 而它的 ssh 協議是透過另一個 開源庫 實現, 所以最終這些配置都會轉換成 Paramiko 的 ssh 配置。
先看下官方的例子:
result = Connection('web1').run('hostname')
建立一個到 web1 這臺伺服器的一個 ssh 連線, 然後執行 hostname , 返回一個這次連線執行結果 python 物件。
這裡就來到了本文的主題, 他是怎樣連線對應的 host 也就是 Web1 的。
每一個 Fabric 的 Connection 都有一個 SSHClient 例項(Paramiko 中實現), 然後透過這個例項來連線上 Web1, 所以就需要 fabric 來提供這個例項連線所需要的必要引數, 這個是 SSHClient 連線的引數。
def connect( self, hostname, port=SSH_PORT, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None, auth_timeout=None, gss_trust_dns=True, passphrase=None, ):
Connection 是繼承自 中的 Context, 就字面意思來說是提供這個 SSHClient 連線的上下文, 也就是 SSHClient 所需的引數。
Connection 中上下文中的引數又會透過 Fabric Config來提供, Connection 例項建立的時候會生成 Fabric 自己的 Config 或將外部傳入 config 物件轉換成 Fabric Config 物件。
Fabric Config 有一個對使用者來說比較有用的一個靜態方法,
@staticmethod def global_defaults(): defaults = InvokeConfig.global_defaults() ours = { # New settings "connect_kwargs": {}, "forward_agent": False, "gateway": None, "load_ssh_configs": True, "port": 22, "run": {"replace_env": True}, "runners": {"remote": Remote}, "ssh_config_path": None, "tasks": {"collection_name": "fabfile"}, # TODO: this becomes an override/extend once Invoke grows execution # timeouts (which should be timeouts.execute) "timeouts": {"connect": None}, "user": get_local_user(), } merge_dicts(defaults, ours) return defaults
這個其實是 Fabric 對 InvokeConfig 預設配置的一個擴充套件, 具體的可以看程式碼, 我們可透過覆蓋這個方法, 來實現我們自己的預設或者說全域性配置, 然後把這個配置傳給 Connection, 為 Connection 中的連線提供必要的引數。
from fabric import Config as FabricConfigfrom invoke.config import merge_dictsclass MyConfig(FabricConfig): @staticmethod def global_defaults(): defaults = FabricConfig.global_defaults() my = { "connect_kwargs": {"password":"123456"}, "port": 22, "ssh_config_path": "./ssh_config", "load_ssh_configs": False, "user": "root", } merge_dicts(defaults, my) return defaults
幾個引數的意義:
connect_kwargs: 為 ssh connect 提供中的引數
port: ssh 連線的埠
ssh_config_path: ssh_config 的路徑, 配置後只會讀取這個路徑 ssh_config 的配置, fabric 擴充套件的引數
load_ssh_configs: 沒有配置 ssh_config_path 的時候, 是否讀取系統和使用者配置
user: 連線的使用者
這些都是預設配置, 優先順序是最低的, ssh_config_path 中配置的優先順序會覆蓋掉預設預設配置。 所以官方例子中 Web1 的配置來源可能有三種,ssh_config_path 中的配置, 系統的 ssh_config(/etc/ssh_config), 以及使用者的 ssh_config(~/.)。
一個值得一提的點是:
當傳入的 config 是一個物件例項的時候, 是不會再建立 Config 物件的,也就是說可以很多個 Connection 共用一個 Config, 這在連線比較多的伺服器的時候很有用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/818/viewspace-2816827/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用Python Fabric配置主機間SSH互信和新增公鑰薦Python
- git ssh配置詳解Git
- SSH配置檔案詳解
- Python遠端部署利器Fabric詳解Python
- python讀配置檔案配置資訊Python
- Fabric CA 配置與應用
- git配置sshGit
- git ssh配置Git
- window下配置SSH連線GitHub、GitHub配置ssh keyGithub
- Hyperledger Fabric 通道配置檔案和容器環境變數詳解變數
- 【python】python 模組學習之--FabricPython
- SSH框架整合配置所需JAR包(SSH整合)框架JAR
- Nginx篇--解讀nginx配置Nginx
- Python讀取YAML配置資料PythonYAML
- SSH框架之VO配置框架
- GitLab配置ssh keyGitlab
- Ubuntu 12.04配置SSHUbuntu
- SSH linux下配置。Linux
- 配置ssh/IP/fw/xhost
- Oracle安裝,ssh配置Oracle
- GitHub SSH 快速配置Github
- GitHub倉庫配置SSH keys步驟流程圖解Github流程圖圖解
- mac配置完ssh依然提示"Enter passphrase for key"解決方法Mac
- 【SSH2(理論篇)】--Struts2配置詳解
- ssh_conf&sshd_conf檔案配置詳解
- 微服務配置中心完全解讀微服務
- nginx gzip配置引數解讀Nginx
- 基於Annotation註解整合SSH框架和基於XML檔案配置Bean整合SSH框架框架XMLBean
- python三大神器之fabricPython
- Python自動化部署工具-FabricPython
- python fabric原來還有rsyncPython
- python怎麼讀取配置檔案Python
- gitlab配置ssh金鑰Gitlab
- git配置多個ssh keyGit
- Git HTTP和SSH 代理配置GitHTTP
- SSH&ProxyChains配置教程AI
- Git 多賬號 SSH 配置Git
- Ubuntu 配置SSH伺服器Ubuntu伺服器