SSH进入具有不同用户名的Vagrant Box

时间:2014-03-25 18:23:14

标签: ssh vagrant

而不是使用" vagrant" ssh-ing到我的Vagrant虚拟机上。用户名和密码,我想使用kevin / kevin。

我修改了Vagrantfile以包含:

config.ssh.username = "kevin"

然后,我跑了vagrant reload

以下输出显示:

[default] Waiting for machine to boot. This may take a few minutes...
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period. This can
mean a number of things.

然而,我仍然可以使用vagrant/vagrant ssh到我的流浪盒上,但是我无法用一个用户名和密码kevin / kevin或kevin / vagrant ssh到盒子上。

请注意,我也尝试了这个答案(https://stackoverflow.com/a/9924122/409976),但我只能使用用户名vagrant而不是kevin ssh到框中(即使它已经过了在Vagrantfile)中指定。

如何配置我的Vagrant文​​件以便我可以使用用户名kevin进行ssh?

5 个答案:

答案 0 :(得分:51)

您可以使用vagrant但不是kevin ssh到该框,这是预期的。

大多数Vagrant基本框只有2个具有SSH访问权限的用户rootvagrant。它们都使用vagrant作为密码,此外,vagrant配置为使用GitHub上Vagrant项目中提供的不安全(为什么?请参阅Vagrant insecure by default?)密钥对进行公钥认证。

为了能够以kevin身份登录,您必须首先打开框并创建用户(useradd -m -s /bin/bash -U kevin),配置公钥身份验证(许多方式,例如ssh-copy-id ,我会留给你的。)

如果您在vagrant ssh中正确设置config.ssh.username,则应该可以在使用Vagrantfile创建用户后进入框中。

当然你可以手动ssh到框中(假设NAT正在使用中)

ssh -p 2222 kevin@localhost

或(在Linux上)

ssh -p 2222 -i /opt/vagrant/embedded/gems/gems/vagrant-1.5.1/keys/vagrant.pub vagrant@localhost

答案 1 :(得分:19)

通过您的配置脚本将用户添加到Vagrant之后的另一个解决方案:

## add kevin
useradd -m -s /bin/bash -U kevin -u 666 --groups wheel
cp -pr /home/vagrant/.ssh /home/kevin/
chown -R kevin:kevin /home/kevin
echo "%kevin ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/kevin

将此添加到您的Vagrant文​​件中:

VAGRANT_COMMAND = ARGV[0]
if VAGRANT_COMMAND == "ssh"
  config.ssh.username = 'kevin'
end

现在,Vagrant将使用默认vagrant用户来配置您的VM,但一旦启动,您可以使用简单的vagrant ssh通过默认的Vagrant ssh-key登录为kevin。< / p>

通过这种方式,您可以发送所需的Vagrantfile,用户只需说vagrant upkevin即可自动使用。

答案 2 :(得分:2)

创建如下所示的流浪文件。请注意,我们正在引导vagrant用户立即更改为我们创建的'kevin'用户。

bootstrap = <<SCRIPT
  useradd -m kevin --groups sudo
  su -c "printf 'cd /home/kevin\nsudo su kevin' >> .bash_profile" -s /bin/sh vagrant
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.host_name = "kevin"
  config.vm.provision "shell", inline: "#{bootstrap}", privileged: true
end

现在ssh进入vm:

$ vagrant ssh
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-83-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.


To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

kevin@kevin:/home/vagrant$

答案 3 :(得分:1)

有点黑客攻击,但您可以将行sudo su - kevin添加到.bash_profile文件中,并添加kevin到没有密码的sudoers文件。

当从命令行以vagrant用户身份登录时,这会将当前用户更改为kevin。

这种方法的优点是不需要启用NAT。

答案 4 :(得分:0)

我找到了一种简单的方法来实现这一点,方法是将 .ssh 复制给用户,例如您的用户名是 alice

sudo su -
cp -r /home/vagrant/.ssh/ /home/alice/
chown -R alice:alice  /home/alice/.ssh

然后在 Vagrantfile 中添加配置:

# ...
config.ssh.username = 'alice'
# ...