1. ssh客户端生成key

 $ ssh-keygen -t rsa -b
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa): vagrantid_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in vagrantid_rsa.
Your public key has been saved in vagrantid_rsa.pub.
The key fingerprint is:
##...
$

2. 公钥填充

说明:https://teamtreehouse.com/community/vagrant-the-host-path-of-the-shared-folder-is-missing

使用vagrant的时候,虚拟机中.ssh文件夹路径:(Linux)/Users/yourname/path -> (vagrant)/home/yourname/path

或者采用

[root@vagrant-centos65 /]# find / -name .ssh
/home/vagrant/.ssh
[root@vagrant-centos65 /]# cd /home/vagrant/.ssh

找到.ssh文件夹位置

#客户机
$ scp ./vagrantid_rsa.pub vagrant@192.168.33.10:~/.ssh/
vagrant@192.168.33.10's password:
vagrantid_rsa.pub % .7KB/s : #用作ssh服务器的vm
[root@vagrant-centos65 .ssh]# ls
authorized_keys vagrantid_rsa.pub

拷贝公钥到ssh服务器之后:

[root@vagrant-centos65 .ssh]# cat vagrantid_rsa.pub >> authorized_keys

3. 上手:Hello, Fabric

$ vim fabfile.py #创建文件,命名为fabfile.py,在文件中定义一个hello函数
$ fab hello
Hello world! Done.

Fabric官网入门教程链接:http://docs.fabfile.org/en/1.10/tutorial.html

4. 调用Fabric的API进行远程登录

参考:

#尝试 1:

fabfile.py:

 from fabric.api import run, env
env.hosts = ['192.168.33.10']# as host1 def taskA():
run('ls')
def taskB():
run('whoami')

终端fab命令执行tasks:

$ fab taskA taskB
[192.168.33.10] Executing task 'taskA'
[192.168.33.10] run: ls
[192.168.33.10] Login password for (username):

如果用户名不相同(在env.hosts里没有指定)这样的方式登陆不了特定用户。

修改:

#尝试 2

 #fabfile.py
from fabric.api import run, env
env.hosts = ['vagrant@192.168.33.10']# 这里可以指定多个主机。多个主机密码需要分别指定,不好
env.passwords = {
'vagrant@192.168.33.10': 'vagrant',
} def taskA():
run('ls')
def taskB():
run('whoami')

终端执行fab命令

$ fab taskA taskB
[vagrant@192.168.33.10] Executing task 'taskA'
[vagrant@192.168.33.10] run: ls
[vagrant@192.168.33.10] Login password for 'vagrant':
Sorry, you can't enter an empty password. Please try again.
[vagrant@192.168.33.10] Login password for 'vagrant':
[vagrant@192.168.33.10] out: httpd-2.4.17 mod_wsgi-4.4.21 pi Python-2.7.10.tar
[vagrant@192.168.33.10] out: httpd-2.4.17.tar.gz mod_wsgi-4.4.21.tar.gz Python-2.7.10
[vagrant@192.168.33.10] out: [vagrant@192.168.33.10] Executing task 'taskB'
[vagrant@192.168.33.10] run: whoami
[vagrant@192.168.33.10] out: vagrant
[vagrant@192.168.33.10] out: Done.
Disconnecting from vagrant@192.168.33.10... done.

还是需要手动输入密码

#尝试 3:在fab命令参数里设置

$ fab taskA -i /Users/(username)/.ssh/vagrantid_rsa -H vagrant@192.168.33.10:
[vagrant@192.168.33.10] Executing task 'taskA'
[vagrant@192.168.33.10] run: ls
[vagrant@192.168.33.10] out: httpd-2.4. mod_wsgi-4.4. pi Python-2.7..tar
[vagrant@192.168.33.10] out: httpd-2.4..tar.gz mod_wsgi-4.4..tar.gz Python-2.7.
[vagrant@192.168.33.10] out: Done.
Disconnecting from vagrant@192.168.33.10... done.

ok,不需要手动输入密码了(客户机的私钥存在/Users/(username)/.ssh/vagrantid_rsa里)

#尝试 4

在fabfile.py里写好密钥存放路径,并且根据http://docs.fabfile.org/en/1.4.0/usage/execution.html#ssh-config与http://stackoverflow.com/questions/5327465/using-an-ssh-keyfile-with-fabric建议,设置好ssh登陆

参考:

How do I configure SSH on OS X?
http://docs.paramiko.org/en/latest/api/client.html#paramiko.client.SSHClient.connect
http://segmentfault.com/a/1190000000497630#articleHeader0

最终代码:

 from fabric.api import run, env
import os if env.ssh_config_path and \
os.path.isfile(os.path.expanduser(env.ssh_config_path)):
env.use_ssh_config = True env.key_filename = ['/Users/***/.ssh/vagrantid_rsa']
env.hosts = ['vagrant@192.168.33.10']# as host1
#not using cache def taskA():
run('ls')
def taskB():
run('whoami')

END.

参考资料:

使用 Vagrant 打造跨平台开发环境
自动化运维工具Fabric - 密码管理(env.password and ssh key)
 
 

[Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验的更多相关文章

  1. VMware 11完全安装Mac OS X 10.10

    本文已迁移到我的个人网站 http://www.wshunli.com 文章地址: http://www.wshunli.com/2016/03/17/VMware-12安装Mac-OS-X-10-1 ...

  2. Python:版本升级(Mac OS X)

    Mac OS X 10.8及以后的版本都预装了Python 2.7,但是在Mac上(Unix-like OS)上修改Python的版本并不如Windows方便.这篇文章的目标是要将Mac自带的Pyth ...

  3. 虚拟机安装苹果系统 VMware 12安装Mac OS X 10.10

    工具/原料 VMware Workstation Pro 12 (这个可以自己下载,并激活,你懂得) Unlocker 207 (链接:http://pan.baidu.com/s/1i43obDb ...

  4. 在 Mac OS X 10.9 搭建 Python3 科学计算环境

    安装 Homebrew 使用 Homebrew 管理 Python 版本.在 Terminal/iTerm2 输入: $ ruby -e "$(curl -fsSL https://raw. ...

  5. VMware Workstation 11 安装MAC OS X 10.10 Yosemite(14B25)图解 2015-01-13 12:26:01|

    VMware Workstation 11 安装MAC OS X 10.10 Yosemite(14B25)图解 2015-01-13 12:26:01|  分类: 网络互联 |  标签:10.10  ...

  6. 【转】windows环境下安装win8.1+Mac OS X 10.10双系统教程

    先要感谢远景论坛里的各位大神们的帖子  没有他们的分享我也不能顺利的装上Mac OS X 10.10! 写这篇随笔主要是为了防止自己遗忘,同时给大家分享下我的经验. 本教程适用于BIOS+MBR分区的 ...

  7. VMWare 安装 Mac OS X10.10 Yosemite

    OS X Yosemite 新功能特性 Mac OS X10.10 GM3|OS X 10.10 Yosemite 正式版下载 如何在虚拟机中安装苹果mac系统图示说明 vm10虚拟机安装Mac OS ...

  8. [MAC]用beamoff给VMware的Mac OS X 10.10.x加速

    MAC OS X 10.10.x Yosemite在VMWare中实在是太慢了,卡出翔!好在高人多,请装beamoff!详见:https://github.com/JasF/beamoff.git C ...

  9. windows环境下安装win8.1+Mac OS X 10.10双系统教程

    首先要感谢远景论坛里的各位大神们的帖子  没有他们的分享我也不能顺利的装上Mac OS X 10.10! 写这篇随笔主要是为了防止自己遗忘,同时给大家分享下我的经验. 本教程适用于BIOS+MBR分区 ...

随机推荐

  1. TortoiseGit编辑全局变量支持https

    在windows,右键,进入tortoisegit的设置窗口,在左边树形菜单选Git,然后店"编辑全局.gid/config"按钮 输入以下文字 [http] sslVerify ...

  2. 将1~n个整数按字典顺序进行排序,返回排序后第m个元素

    给定一个整数n,给定一个整数m,将1~n个整数按字典顺序进行排序,返回排序后第m个元素.n最大可为5000000.字典排序的含义为:从最高位开始比较.1开头的数字排在最前面,然后是2开头的数字,然后是 ...

  3. Web APP开发技巧总结(转)

    一.META/LINK相关: 1.百度禁止转码 通过百度手机打开网页时,百度可能会对你的网页进行转码,往你页面贴上它的广告,非常之恶心.不过我们可以通过这个meta标签来禁止它: <meta h ...

  4. Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  5. win7/8/10安装过程中将动态磁盘转为basic

    在分区界面运行Shift+F10 在命令窗口运行Diskpart list diskpart select disk n(n为磁盘号) clean convert xxx PS:xxx代表要转换的结果 ...

  6. textbox button 模拟fileupload

    方案一:  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.asp ...

  7. 如何在脚本中获取进程ID(PID)

    我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本 ...

  8. PHPExcel读取Excel文件的实现代码

    <?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...

  9. 用Pyinstaller打包发布exe应用 (转)经测可用

    安装Pyinstaller   1 按照习惯,我们使用pip来安装模块.我们一直以来强调,要用最偷懒的方法.写代码的人尤其如此.人生苦短,你要偷懒~   0Python | 如何用pip安装模块和包 ...

  10. 【初级】linux rm 命令详解及使用方法实战

    rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...