【问题标题】:SSH onto Vagrant Box With Different UsernameSSH 进入具有不同用户名的 Vagrant Box
【发布时间】:2014-05-03 19:16:51
【问题描述】:

我不想使用“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 到我的 vagrant box,但我无法使用 kevin/kevin 或 kevin/vagrant 的用户名和密码 ssh 到这个 box。

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

如何配置我的 Vagrantfile 以便我可以使用用户名 kevin 进行 ssh?

【问题讨论】:

  • 如果您可以使用vagrant 登录自己,但不能使用 Kevin,那么听起来您需要在访客映像中设置 kevin 用户。 Vagrantfile配置只设置用户使用,不设置guest用户。

标签: ssh vagrant


【解决方案1】:

您可以使用vagrant SSH 到盒子,但不能使用kevin,这是预期的。

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

为了能够以kevin 登录,您必须先 ssh 进入该框并创建用户 (useradd -m -s /bin/bash -U kevin),然后配置公钥身份验证(多种方式,例如 ssh-copy-id,我会留下它给你。)

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

当然你可以手动通过 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

【讨论】:

  • 请注意,我能够简单地创建一个用户 (useradd ...),销毁并启动我的 VM,然后使用 kevin/kevin 登录成功地使用 putty 进行 SSH。但是,我有点困惑,因为正如您在“Vagrant 默认不安全?”中提到的那样,vagrantroot 不应该只能在没有明确配置密钥的情况下进行 SSH 吗?
  • 您可以使用 vagrant 用户 ssh 进入该框,成为 root,然后将文件 /home/vagrant/.ssh/authorized_keys 复制到 /home/kevin/.ssh/authorized_keys。确保 /home/kevin/.ssh/authorized_keys 的所有权和权限都OK(600和所有者kevin:kevin的组)。
  • @Saule 的评论是最好的答案。线程很旧,但对这个主题的搜索把我带到了这里。
  • 我也认为这是一篇很好的文章ermaker.github.io/blog/2015/11/18/…
  • Rob 提供的那个链接现在已经失效了,所以请使用this one,由 Internet 档案馆提供?
【解决方案2】:

另一种解决方案,通过您的配置脚本将用户添加到 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 登录。

这样您就可以发送您想要的Vagrantfile,用户只需说vagrant upkevin 就会自动准备好使用。

【讨论】:

  • 您知道如何存储密码吗?执行 config.ssh.password 似乎没有奏效。谢谢!
【解决方案3】:

创建一个如下所示的 vagrant 文件。请注意,我们正在引导 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 进入虚拟机:

$ 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$

【讨论】:

  • 很好,我喜欢这种自给自足的特性。
【解决方案4】:

有点小技巧,但您可以将行 sudo su - kevin 添加到您的 .bash_profile 文件中,并将 kevin 添加到 sudoers 文件中,无需密码。

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

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

【讨论】:

  • 这真是一个黑客!但它很简单,我喜欢它。
【解决方案5】:

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

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

然后在 Vagrantfile 中添加配置:

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

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多