linux - Jenkins 和 Vagrant 的情况很奇怪

标签 linux jenkins ssh vagrant lxc

我有最新版本的 Jenkis(在 Tomcat 下运行)以及 Vagrant 和 LXC 容器。 Tomcat 在 jenkins 用户下运行。我有下一个 Vagrantfile

Vagrant.configure(2) do |config|
  config.vm.box = "arjenvrielink/xenial64-lxc"
  config.vm.provider :lxc do |lxc|
    lxc.backingstore = 'dir'
  end
end

因此,当我通过 vagrant up 从 bash 运行 lxc 容器时,一切都很好。 vagrant ssh 成功了。但是如果我通过 Jenkins 作业运行它,我会得到这个

Started by user admin
[EnvInject] - Loading node environment variables.
Building in workspace /home/jenkins/workspaces/server
[server] $ /bin/bash /opt/tomcat/temp/jenkins204809790857124992.sh
Bringing machine 'default' up with 'lxc' provider...
==> default: Importing base box 'arjenvrielink/xenial64-lxc'...
==> default: Checking if box 'arjenvrielink/xenial64-lxc' is up to date...
==> default: Setting up mount entries for shared folders...
    default: /vagrant => /home/jenkins/workspaces/server/vagrant
==> default: Starting container...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 10.0.3.29:22
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
Build was aborted
Aborted by admin
Finished: ABORTED

Jenkins 作业只包含这些命令

!#/bin/bash
cd vagrant
vagrant up

在调查过程中我发现下一个不同。然后我从 bash 运行 vagrant ssh-config 出来:

Host default
  HostName 10.0.3.212
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/jenkins/workspaces/server/vagrant/.vagrant/machines/default/lxc/private_key
  IdentitiesOnly yes
  LogLevel FATAL

但后来我从 Jenkins 的工作中逃脱了,我得到了这个

Host default
  HostName 10.0.3.217
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/jenkins/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

我做错了什么?

最佳答案

编辑:

arjenvrielink/xenial64-lxcan official box 所以我仍然很确定你的问题是 Vagrant insecure key replacement mecanism但我的解决方案对您没有帮助。


arjenvrielink/xenial64-lxc 是自定义框吗?

如果是这样,请确保将不安全的 key 放入其中,以便任何新用户(包括 Jenkins)都可以访问该框,因为首先 vagrant 使用不安全的 key 连接到该框,然后创建一个新的。

如果你想在框中包含你自己的 key ,请确保将以下行添加到你的 Vagrantfile 中:

Vagrant.configure("2") do |config|
  config.ssh.private_key_path = File.expand_path("<path of the key relative to Vagrantfile>", __FILE__)
end

需要注意的是,您必须在 vagrant environement 运行的任何地方都提供 key 。

关于linux - Jenkins 和 Vagrant 的情况很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44677336/

相关文章:

java - 如何正确启动Jetty

ssh - 从客户端向服务器发送数据通过SSH隧道

git - 无法在 Windows 8 嵌入式上通过 git bash chmod SSH key

c++ - 如何恢复linux当前所有进程

python - 无法从命令行访问 NamedTemporaryFile

build - JENKINS 构建运行并行和顺序作业

bash - 从 jenkins 中的 docker 容器运行命令时没有日志

python - 生成和发送 MS Outlook 任务

php - 为什么我在防火墙后面的网络应用程序返回我的 IP 地址而不是域名?

git - .gitignore 适用于除 Jenkins 作业配置文件之外的所有文件