Fabric SSH連接時關於找不到主機的問題

先上一段簡單的fabric代碼:html

from __future__ import with_statement
from fabric.api import *


env.user = 'zhangsan'

env.hosts = ['192.168.1.1']
env.password = '123456'

with settings(warn_only=True):
local('pwd')

with cd('/home/jianping.fan'):
run('ls')

 當執行代碼後出現:No hosts found. Please specify (single) host string for connection:python

出現該錯誤的緣由是fabric的環境env有hosts和hosts_string倆種方法,前者是鏈接多臺機器,然後者是單臺連接,按官方文檔的說法,使用hosts指定主機,會遍歷該列表中主機ip,但實際執行中並無這樣作,猜想也許與fabric的版本有關係.我安裝的版本號是:1.14.0nginx

 

所以,將env.hosts = ['192.168.1.1] 改爲env.hosts_string = '192.168.1.1'便可解決單臺機器的鏈接問題. git

 

 附Fabric env對象和經常使用APIgithub

 env對象:web

env.hosts   #定義目標主機,能夠用IP或主機名錶示,以python的列表形式定義。如env.hosts=['192.168.1.21','192.168.1.22']
env.exclude_hosts   #排除指定主機,如env.exclude_hosts=['192.168.1.21']
env.user   #定義用戶名,如env.user='root'
env.port   #定義端口,默認爲22,如env.port='22'
env.password   #定義密碼,如env.password='123456'
env.passwords  #定義多個密碼,不一樣主機對應不一樣密碼,如:env.passwords = {'root@192.168.1.21:22':'123456','root@192.168.1.22:22':'654321'}
env.gateway   #定義網關(中轉、堡壘機)IP,如env.gateway='192.168.1.23
env.roledefs   #定義角色分組,好比web組合db組主機區分開來:env.roledefs = {'webserver':['192.168.1.21','192.168.1.22'],'dbserver':['192.168.1.25','192.168.1.26']} env.deploy_release_dir #自定義全局變量,格式:env. + '變量名稱',如env.age,env.sex等

 

env.roledefs的使用方法實例:api

env.roledefs = {'webserver':['192.168.1.21','192.168.1.22'],'dbserver':['192.168.1.25','192.168.1.26']} #引用分組時使用python裝飾器方式來進行,如:
@roles('webserver') def webtask(): run('/usr/local/nginx/sbin/nginx') @roles('webserver','dbserver') def publictask(): run('uptime'

-----------------------------------------華麗的分割線----------------------------------------------------------------------------------------函數

 經常使用API:spa

local    #執行本地命令,如local('uname -s')
lcd      #切換本地目錄,如lcd('/home')
cd       #切換遠程目錄
run     #執行遠程命令
sudo   #sudo方式執行遠程命令,如sudo('/etc/init.d/httpd start')
put     #上次本地文件導遠程主機,如put('/home/user.info','/data/user.info')
get     #從遠程主機下載文件到本地,如:get('/data/user.info','/home/user.info')
prompt  #得到用戶輸入信息,如:prompt('please input user password:')
confirm  #得到提示信息確認,如:confirm('Test failed,Continue[Y/N]?')
reboot   #重啓遠程主機,如:reboot()
 @task #函數修飾符,標識的函數爲fab可調用的,非標記對fab不可見,純業務邏輯
@runs_once   #函數修飾符,標識的函數只會執行一次,不受多臺主機影響

 

 

更多詳細用法請移步官網: https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html code

       git:   https://github.com/fabric/fabric/ 

相關文章
相關標籤/搜索