先上一段简单的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. IDEA远程调试代码

    一.设置远程调式端口 点击Remote 设置名字和要部署的远程服务器IP地址和端口 二.将Jar包上传到远程服务器运行 启动命令 java -Xdebug -agentlib:jdwp=transpo ...

  2. vs2019 实现C#调用c++的dll两种方法

    1.托管与非托管的区别 2.非托管类的实现 第一步:创建C++空项目(命名Caculate)添加一个类AddOperate 第二步:将C++代码编译成动态库dll 第三步:将dll拷贝到c#项目输入目 ...

  3. [ASP.NET MVC]@RenderSection,@RenderBody(),@RenderPage

    1.@RenderBody()  作用和母版页中的服务器控件类似,当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过布局页面的@RenderBody()方法呈现在标签之 ...

  4. 并发容器之ConcurrentHashMap(转载)

    Java并发编程:并发容器之ConcurrentHashMap(转载) 下面这部分内容转载自: http://www.haogongju.net/art/2350374 1.7与1.8有很大的区别:h ...

  5. xv6学习笔记(5) : 锁与管道与多cpu

    xv6学习笔记(5) : 锁与管道与多cpu 1. xv6锁结构 1. xv6操作系统要求在内核临界区操作时中断必须关闭. 如果此时中断开启,那么可能会出现以下死锁情况: 进程A在内核态运行并拿下了p ...

  6. Linkerd 2.10(Step by Step)—配置超时

    Linkerd 2.10 系列 快速上手 Linkerd v2 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 ...

  7. RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

  8. WSL(Ubuntu)下安装Redis

    一.安装 输入命令安装redis-server sudo apt-get install redis-server 安装完成后打开redis.conf文件,找到bind 127.0.0.1,更改为bi ...

  9. 发布日志 - kratos v2.0.4 版本发布

    V2.0.4 Release Release v2.0.4 · go-kratos/kratos (github.com) 新的功能 proto-gen-http 工具在生产代码时如果 POST/PU ...

  10. openresty lua-resty-redis 封装 a wrapper for lua-resty-redis 优雅一点点

    搜了一下别人的封装代码,感觉不够优雅,主要是 set_keepalive 的调用时机不太好 我自己下面的代码是利用 coroutine, 每次当前 phase 结束后自动调用 set_keepaliv ...