如何将我的部署密钥移至无业游民?


9

我想将ssh密钥移入无业游民并将其放进去~/.ssh,最简单的方法是什么?我的Vagrant文​​件中包含以下内容:

config.vm.synced_folder "conf.d", "/svr/conf.d"
config.vm.provision :shell, 
:inline => "ls -l /svr/conf.d/.ssh"

总数4 -rw-r--r-- 1个无业游民无业游民1670 Mar 26 08:19 id_rsa.mediapop

config.vm.provision :shell, 
:inline => "cp /svr/conf.d/.ssh/id_rsa.mediapop /home/ubuntu/.ssh/id_rsa"
config.vm.provision :shell, 
:inline => "ls -l /home/ubuntu/.ssh"

总数4 -rw ------- 1 ubuntu ubuntu 0 Mar 22 08:56authorized_keys -rw-r--r-- 1 root root 1670 Mar 26 08:59 id_rsa

但是当我这样做时,vagrant ssh -c "ls -l ~/.ssh"我得到:

$ vagrant ssh -c "ls -l ~/.ssh"
total 4
-rw-r--r-- 1 vagrant vagrant 409 Mar 20 04:47 authorized_keys

所以流浪汉正在覆盖我的.ssh目录。

Answers:


13

我放入了SSH文件conf.d/.ssh/id_rsa.medipop,然后执行了以下操作:

config.vm.synced_folder "conf.d", "/svr/conf.d"
config.vm.provision :shell, 
:inline => "cp /svr/conf.d/.ssh/id_rsa.mediapop /home/vagrant/.ssh/id_rsa"

一旦我意识到这个无业游民的用户就vagrant不能出色地工作了ubuntu(这就是为什么我对我的ssh密钥似乎消失的问题感到困惑)的原因。


这是在Windows上无法进行代理转发的方式。
markus

可以,但是出现此错误,==>默认值:stdin:不是tty还是权限更改,必须重置,是否可以使用sudo off fix运行?
radtek

12

什么SSH代理转发?

确保您的SSH密钥首先在本地工作,然后添加config.ssh.forward_agent = true到您的SSH密钥中以Vagrantfile进行传递。

此处有流浪者详细信息:http : //docs.vagrantup.com/v2/vagrantfile/ssh_settings.html


我对这样做感到厌倦,因为我打算将无聊的盒子分发给我们的设计师,如果我开始将钥匙串称为计算机用品,他们可能会觉得我很有趣。:)不过谢谢!
Kit Sunde 2013年

在那种情况下,我要么用VeeWee构建自己的盒子,然后将其作为软件包分发,config.ssh.private_key_path要么做一些可怕的事情,例如在带有Vagrantfile的项目文件夹中使用ssh密钥。必须在用例中以某种方式分发它,所以请选择邪恶!
rjocoleman

1
这几乎是相同的问题:superuser.com/a/570775/210384
rjocoleman 2013年

5

您可以使用Ruby的核心File模块,如下所示:

  config.vm.provision "shell" do |s|
    ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
    s.inline = <<-SHELL
      echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
      echo #{ssh_pub_key} >> /root/.ssh/authorized_keys
    SHELL
  end

我很惊讶Vagrant默认不提供此功能!


我建议在echo参数 echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keys和之间加上引号echo "#{ssh_pub_key}" >> /root/.ssh/authorized_keys。如果公共SSH密钥包含特殊字符(例如(),这也将起作用。
tjanez

1

查看Vagrant Shell Provisioner,您可以将其添加到Vagrantfile中。

但是,根据您要实现的目标,最好使用提供的ssh密钥来访问Vagrant。

要生成要添加到您的快速配置文件~/.ssh/config,包括运行标识文件行$ vagrant ssh-config。然后,您可以$ ssh you-vagrant-box而不是$ vagrant ssh


1
啊,这不是为了让SSH进入我的机器,而是让我无所事事地访问我的git仓库。因此,我需要将文件从主机移至〜/ .ssh /
Kit Sunde 2013年

1
那更清楚了!在上面的编辑中,您确定~/并且/home/ubuntu位置相同吗?Vagrant的默认homedir为/home/vagrant
rjocoleman

不要忘记您的Vagrantfile是完全解释为ruby的,因此您可以执行以下操作: git_ssh_key = File.read('/svr/conf.d/.ssh/id_rsa.mediapop'); config.vm.provision :shell, :inline => "cat >>/home/vagrant/.ssh/id_rda.mediapop <<EOF #{git_ssh_key} EOF" 您可能会在读取ssh密钥时遇到权限问题。
rjocoleman

1
我已设法将文件复制到~/.ssh使用同步的文件夹和中cp,但似乎流浪汉之后将其覆盖。
Kit Sunde 2013年

0

要同时移动私钥和公钥,将可以进行以下操作:

config.vm.provision "shell" do |s|
  ssh_prv_key = File.read("#{Dir.home}/.ssh/id_rsa")
  ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
  s.inline = <<-SHELL
    echo Provisioning public ssh key...
    [ -e /home/vagrant/.ssh/id_rsa.pub ] && rm /home/vagrant/.ssh/id_rsa.pub
    touch /home/vagrant/.ssh/id_rsa.pub
    echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/id_rsa.pub

    echo Provisioning private ssh key...
    [ -e /home/vagrant/.ssh/id_rsa ] && rm /home/vagrant/.ssh/id_rsa
    touch /home/vagrant/.ssh/id_rsa
    echo "#{ssh_prv_key}" >> /home/vagrant/.ssh/id_rsa

    echo Provisioning of ssh keys completed [Success].
  SHELL
end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.