不使用“vagrant ssh”命令连接到 Vagrant Box
当Vagrant设置虚拟机时,它会在本地机器上设置一个端口,您可以使用它通过SSH连接到机器。默认情况下,这通常是端口2222,Vagrant将其映射到虚拟机上的端口22。所有这些本质上都是透明的,因此当您键入vagrantssh时,您可以毫无问题地连接到该框。Vagrant在幕后处理所有的端口匹配和密钥查找。
出于好奇,我发现自己需要通过我在Vagrantfile中设置的IP地址直接连接到盒子,而不是使用vagrantssh命令。我知道Vagrant使用用户名“vagrant”和在用户文件夹的.vagrant.d目录中找到的私钥创建了一个到服务器的链接。这是自Vagrant开始使用以来一直在使用的相同私钥,因此它在任何安装了Vagrant的机器上都是相同的。所以我的第一个测试是使用标准的SSH连接命令,但也使用-i标志传入Vagrant不安全密钥。这失败了以下输出。
$ ssh [email protected] -i /your/user/directory/.vagrant.d/insecure_private_key Received disconnect from 192.168.100.100: 2: Too many authentication failures for vagrant
经过一番挖掘,我发现虽然我传递了密钥,但我需要包含其他一些选项才能使事情正常工作。这让我发现了vagrantssh-config命令。您可以使用此命令输出一个有效的SSH配置,该配置可以放入您的SSH配置文件中以允许连接到虚拟机。这是一些示例输出(对“默认”的引用是Vagrantfile中主机的名称)。
Host default HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /your/user/directory/.vagrant.d/insecure_private_key IdentitiesOnly yes LogLevel FATAL ForwardAgent yes
通过将其放入您的.ssh/config文件,您可以通过以下方式通过SSH连接到虚拟机。
ssh[email protected]
然而,我们在这里所做的基本上是使用本地机器根据它的端口号将我们路由到正确的机器。我仍然想通过我为它设置的IP地址连接到盒子。这意味着使用-o标志将额外的SSH配置参数传递给命令。
因此,假设虚拟机的IP地址是192.168.100.100,那么您将通过以下方式连接到它。
ssh[email protected]-i/your/user/directory/.vagrant.d/insecure_private_key-oUserKnownHostsFile=/dev/null-oStrictHostKeyChecking=no-oPasswordAuthentication=no-oIdentitiesOnly=yes
您可以通过使用SSH配置文件在运行时自动将这些参数添加到您的SSH调用中来稍微简化此操作。这假设boxIP地址与上面相同,但您也可以在Host标头中包含通配符以包含许多Vagrantbox(基于它们的IP地址)。
Host 192.168.100.100 StrictHostKeyChecking no UserKnownHostsFile /dev/null IdentitiesOnly yes User vagrant IdentityFile /your/user/directory/.vagrant.d/insecure_private_key PasswordAuthentication no
这允许您使用以下命令连接到盒子(没有这么多额外的选项)。
ssh[email protected]