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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- git ssh配置詳解Git
- SSH 配置
- git ssh配置Git
- git配置sshGit
- python讀配置檔案配置資訊Python
- Fabric CA 配置與應用
- GitLab配置ssh keyGitlab
- 【ssh祕鑰配置】
- GitHub倉庫配置SSH keys步驟流程圖解Github流程圖圖解
- Python讀取YAML配置資料PythonYAML
- Hyperledger Fabric 通道配置檔案和容器環境變數詳解變數
- GitHub SSH 快速配置Github
- gitlab配置ssh金鑰Gitlab
- SSH&ProxyChains配置教程AI
- python config配置檔案的讀寫Python
- python怎麼讀取配置檔案Python
- 微服務配置中心完全解讀微服務
- Spring Security(三)--核心配置解讀Spring
- 解決docker jenkins 配置SSH免密登入配置成功後不生效問題DockerJenkins
- RAC主機配置ssh互信
- Ubuntu 配置SSH伺服器Ubuntu伺服器
- Linux伺服器---ssh配置Linux伺服器
- git配置多個ssh keyGit
- Git 多賬號 SSH 配置Git
- Git HTTP和SSH 代理配置GitHTTP
- Fabric 1.0原始碼分析(6)configtx(配置交易) #ChannelConfig(通道配置)原始碼
- Python自動化部署工具-FabricPython
- python三大神器之fabricPython
- python讀取yaml配置檔案的方法PythonYAML
- 透過python讀取ini配置檔案Python
- 如何在python中讀取配置檔案Python
- Fabric 1.0原始碼分析(7)configtx(配置交易) #configtxgen(生成通道配置)原始碼
- 配置SSH免密碼登陸密碼
- 13、環境-配置git-sshGit
- 專案管理之——Git SSH配置專案管理Git
- ssh配置檔案安全設定
- Git 中 SSH Key 生成和配置Git
- linux環境下ssh 互信配置Linux