Vagrant是用于创建VM的便捷工具。 这很像启动EC2实例,但是在Vagrant的情况下,一切都已本地化。 最重要的是,它是免费的。
我倾向于将Ubuntu作为首选的Linux版本。 因此,所有生产EC2实例都使用自定义的Ubuntu AMI。 但是,最初使用Vagrant VM在本地测试使用各种软件库对该系统的各个方面进行测试。 此外,您可以安装从Debian到OpenSuse到Heroku的Cedalon的其他操作系统的本地化VM。
生成Heroku的Cedalon(这是安装了Ruby和Node.js的Ubuntu 10.04的版本)的本地实例就像键入一样容易:
在本地启动Heroku的Cedalon
vagrant init heroku http://dl.dropbox.com/u/1906634/heroku.box
vagrant up
然后,您可以像这样通过SSH连接到正在运行的VM:
SSH到本地VM
vagrant ssh
但是, vagrant ssh
命令可能会出现问题,尤其是在您要自动执行SSH的某些方面的情况下–例如,您正在SSH之上使用某些库。 在这种情况下,您需要直接使用SSH ,而不是通过Vagrant。
幸运的是,您可以很容易地正常使用SSH到本地Vagrant实例。 您需要告诉SSH使用哪个密钥(Vagrant为您创建了一个),以哪个用户身份连接(通常是vagrant)以及要连接到哪个端口(通常为2222)。 所有这些信息都可以通过命令vagrant ssh-config
。
要在使用Vagrant实例时使用普通的Jane SSH,首先需要执行以下命令:
打印出流浪者钥匙的位置
vagrant ssh-config | grep IdentityFile | awk '{print $2}'
这3叉命令最终会告诉您Vagrant在哪里创建了密钥文件。 命令awk '{print $2}'
在ssh-config
字符串中以IdentityFile
(指向其位置)开头的第二行打印。
现在您知道了密钥文件的位置,可以使用ssh(假设默认端口未从2222更改–请仔细检查ssh-config
来确保),如下所示:
使用普通的SSH
ssh -i /some/dir/.vagrant.d/insecure_private_key -l vagrant -p 2222 127.0.0.1
如果您碰巧启动了不同的VM,例如,我同时拥有Heroku Cedalon和普通的Ubuntu实例,则SSH可能会抱怨远程主机标识已更改。 这是一个有效的警告,因为与本地主机关联的RSA指纹确实已更改。
您可以建议SSH通过添加两个其他标志来忽略此警告 。 我强烈建议您仅通过命令行而不是使用某些SSH配置文件来执行此操作,因为警告SSH引发是完全合法的,并且可以使您免遭中间人攻击。
但是,如果您正在使用本地化的VM,并且需要绕过该警告,请使用以下两个标志:
SSH的两个附加标志
-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
因此,当我SSH到本地Vagrant实例时,我会输入以下内容:
SSH到Vagrant实例
ssh -i /some/dir/.vagrant.d/insecure_private_key -l vagrant -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 127.0.0.1
最后,要关闭Vagrant实例,只需发出以下命令:
SSH到Vagrant实例
vagrant destroy
Vagrant使启动本地化开发环境变得非常容易– Vagrant实例的启动速度比EC2实例快,并且它们是免费的。 现在,您知道了如何使用普通的SSH连接到它们。 你能挖一下它么?