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 $ 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
或者采用
$ 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)