标签:
1 $ ssh-keygen -t rsa -b 4096 2 Generating public/private rsa key pair. 3 Enter file in which to save the key (/Users/(username)/.ssh/id_rsa): vagrantid_rsa 4 Enter passphrase (empty for no passphrase): 5 Enter same passphrase again: 6 Your identification has been saved in vagrantid_rsa. 7 Your public key has been saved in vagrantid_rsa.pub. 8 The key fingerprint is: 9 ##... 10 $
说明: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 100% 758 0.7KB/s 00:00 #用作ssh服务器的vm [root@vagrant-centos65 .ssh]# ls authorized_keys vagrantid_rsa.pub
拷贝公钥到ssh服务器之后:
[root@vagrant-centos65 .ssh]# cat vagrantid_rsa.pub >> authorized_keys
$ vim fabfile.py #创建文件,命名为fabfile.py,在文件中定义一个hello函数 $ fab hello Hello world! Done.
Fabric官网入门教程链接:http://docs.fabfile.org/en/1.10/tutorial.html
参考:
#尝试 1:
fabfile.py:
1 from fabric.api import run, env 2 env.hosts = [‘192.168.33.10‘]# as host1 3 4 def taskA(): 5 run(‘ls‘) 6 def taskB(): 7 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
1 #fabfile.py 2 from fabric.api import run, env 3 env.hosts = [‘vagrant@192.168.33.10‘]# 这里可以指定多个主机。多个主机密码需要分别指定,不好 4 env.passwords = { 5 ‘vagrant@192.168.33.10‘: ‘vagrant‘, 6 } 7 8 def taskA(): 9 run(‘ls‘) 10 def taskB(): 11 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:22 [vagrant@192.168.33.10] Executing task ‘taskA‘ [vagrant@192.168.33.10] run: ls [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: 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.connecthttp://segmentfault.com/a/1190000000497630#articleHeader0最终代码:
1 from fabric.api import run, env 2 import os 3 4 if env.ssh_config_path and 5 os.path.isfile(os.path.expanduser(env.ssh_config_path)): 6 env.use_ssh_config = True 7 8 env.key_filename = [‘/Users/***/.ssh/vagrantid_rsa‘] 9 env.hosts = [‘vagrant@192.168.33.10‘]# as host1 10 #not using cache 11 12 def taskA(): 13 run(‘ls‘) 14 def taskB(): 15 run(‘whoami‘)
END.
参考资料:
使用 Vagrant 打造跨平台开发环境自动化运维工具Fabric - 密码管理(env.password and ssh key)[Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验
标签:
原文地址:http://www.cnblogs.com/nwinds/p/4970986.html