先上一段简单的fabric代码:

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:

出现该错误的原因是fabric的环境env有hosts和hosts_string俩种方法,前者是连接多台机器,而后者是单台链接,按官方文档的说法,使用hosts指定主机,会遍历该列表中主机ip,但实际执行中并没有这样做,猜测也许与fabric的版本有关系.我安装的版本号是:1.14.0

因此,将env.hosts = ['192.168.1.1] 改成env.hosts_string = '192.168.1.1'即可解决单台机器的连接问题. 

附Fabric env对象和常用API

env对象:

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的使用方法实例:

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:

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 

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

Fabric SSH链接时关于找不到主机的问题的更多相关文章

  1. ssh 远程链接时出现错误提示:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

    ssh 远程链接时出现错误提示 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST I ...

  2. 【问题:SSH】win10使用SSH链接服务器时,提示:Host key verification failed

    异常原因:当前连接新建的验证信息与之前保存的验证信息不一致,将原来的验证信息删除就可以了. 1 使用以下命令,清空之前缓存的信息.或者直接打开C:\Users\Nolan\.ssh\known_hos ...

  3. 使用whiptail写linux字符界面ssh链接工具2.0

    先看一下效果 选择分组 选择服务器 开始链接 为什么写 之前写过一个字符界面的链接工具,但是看起来比较简陋,他是这个样子的: 看起来十分不好看.后来在网上看到shell中有一个whiptail工具可以 ...

  4. 菜鸟在C语言编译,链接时可能遇到的两个问题

    最近在看 CSAPP (Computer Systems A Programmers Perspective 2nd) 的第七章 链接.学到了点东西,跟大家分享.下文中的例子都是出自CSAPP第七章. ...

  5. 【随笔】ssh登录时如何直接在参数中加入登录密码

    如同apt-get安装程序时会有-y参数来避免交互输入一样,我也希望在ssh登录时能够直接附加登录密码以避免交互式输入密码这一步,网上找了找,方法很多. 比如直接通过密钥免密码登录,不过需要改动很多, ...

  6. 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法

    关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...

  7. 解决SSH远程执行命令找不到环境变量的问题

    通过SSH执行远程主机的命令或脚本时,经常会出现找不到自定义环境变量的问题.但是,如果通过SSH登录远程主机,然后再执行相同的命令或脚本,那么此时执行又是成功的.两种相似的方法,得到的结果却截然不同, ...

  8. ssh连接时提示THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED

    ssh链接云主机: ssh root@123.59.xx.xx 报错:THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED 解决办法: ssh -o Str ...

  9. 折腾gcc/g++链接时.o文件及库的顺序问题(转)

    转自: http://www.cnblogs.com/OCaml/archive/2012/06/18/2554086.html#sec-1-1 折腾gcc/g++链接时.o文件及库的顺序问题 Tab ...

随机推荐

  1. NOIP 模拟 $32\; \rm Walker$

    题解 \(by\;zj\varphi\) 发现当把 \(\rm scale×cos\theta,scale×sin\theta,dx,dy\) 当作变量时只有四个,两个方程就行. 当 \(\rm n\ ...

  2. NOIP 模拟 $29\; \rm 最近公共祖先$

    题解 \(by\;zj\varphi\) 首先考虑,如果将一个点修改成了黑点,那么它能够造成多少贡献. 它先会对自己的子树中的答案造成 \(w_x\) 的贡献. 考虑祖先时,它会对不包括自己的子树造成 ...

  3. COM笔记-CoCreateInstance

    CoCreateInstance 创建组件的最简单的方法是使用CoCreateInstance函数. 在COM库中包含一个用于创建组件的名为CoCreateInstance的函数.此函数需要一个CLS ...

  4. js判断checkbox是否选中 .checked不管用

    今天开发遇到一个小问题,记小本本记小本本 document.getElementById("id").checked //正确 //如果返回值为true代表选中 //如果返回值为f ...

  5. Win7安装 Mysql 5.7.22客户端

    根据自己的操作系统下载对应的32位或64位的压缩包: http://dev.mysql.com/downloads/mysql/ 官网下载 选择Windows对应的版本下载 不注册直接下载 安装步骤 ...

  6. SpringBoot笔记(7)

    一.单元测试 1.JUnit5简介 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不 ...

  7. vue JS获取当前时间并格式化 ( 前端小细节,大进步 )

    JS // 获取并且格式化时间     formatter (thistime, fmt) {       let $this = new Date(thistime)       let o = { ...

  8. Object-源码

    Object的结构 类构造器 一个类必须要有一个构造器的存在 , Object类源码中,是看不到构造器的,系统会自动添加一个无参构造器. Object obj = new Object(): equa ...

  9. Kubernetes的安装部署

    前言:简述kubernetes(k8s)集群 k8s集群基本功能组件由master和node组成. master节点上主要有kube-apiserver.kube-scheduler.kube-con ...

  10. set类型数据的操作指令

    集合无序,无下标. 1. 也可以在集合上继续添加元素. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.