Vagrant 由于sudo需要tty,封隔器构建失败

Vagrant 由于sudo需要tty,封隔器构建失败,vagrant,virtualbox,sudo,packer,Vagrant,Virtualbox,Sudo,Packer,我的打包程序生成失败,出现以下消息: sudo: sorry, you must have a tty to run sudo. 我的主机是Windows8,带有vagrant和virtualbox,我的来宾是centos7。 在研究中,我的理解是,sudo不需要tty是这条信息的原因。但是我在ks.cfg中有以下内容: sed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers 问题是我需要在windows vagrant ssh

我的打包程序生成失败,出现以下消息:

sudo: sorry, you must have a tty to run sudo.
我的主机是Windows8,带有vagrant和virtualbox,我的来宾是centos7。 在研究中,我的理解是,sudo不需要tty是这条信息的原因。但是我在
ks.cfg
中有以下内容:

sed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers
问题是我需要在windows vagrant ssh端设置一些东西,以便创建一个psuedo tty吗

这是我第一次尝试packer

我正在使用我下载的打包机构建

packer.json如下:

{
  "variables": {
    "version": "{{env `VERSION`}}"
  },
  "provisioners": [
    {
      "type": "shell",
      "execute_command": "sudo {{.Vars}} sh {{.Path}}",
      "scripts": [
        "scripts/vagrant.sh",
        "scripts/vmtools.sh",
        "scripts/cleanup.sh",
        "scripts/zerodisk.sh"
      ]
    }
  ],
  "post-processors": [
    {
      "type": "vagrant",
      "output": "INSANEWORKS-CentOS-7.0-x86_64-{{user `version`}}-{{.Provider}}.box"
    }
  ],
  "builders": [
    {
      "type": "virtualbox-iso",
      "iso_url": "http://ftp.iij.ad.jp/pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-NetInstall-1503.iso",
      "iso_checksum": "498bb78789ddc7973fe14358822eb1b48521bbaca91c17bd132c7f8c903d79b3",
      "iso_checksum_type": "sha256",
      "ssh_username": "vagrant",
      "ssh_password": "vagrant",
      "ssh_wait_timeout": "45m",
      "ssh_disable_agent": "true",
      "boot_command": [
        "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg<enter><wait>"
      ],
      "disk_size": "40000",
      "hard_drive_interface": "sata",
      "guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
      "guest_additions_sha256": "7b61f523db7ba75aebc4c7bb0cae2da92674fa72299e4a006c5c67517f7d786b",
      "guest_os_type": "RedHat_64",
      "headless": "true",
      "http_directory": "http",
      "shutdown_command": "sudo /sbin/halt -p",
      "vboxmanage": [
        [ "modifyvm", "{{.Name}}", "--memory", "1024" ],
        [ "modifyvm", "{{.Name}}", "--cpus", "1" ]
      ]
    }
  ]
}
{
“变量”:{
“版本”:“{env`version`}”
},
“供应者”:[
{
“类型”:“外壳”,
“执行命令”:“sudo{{.Vars}}sh{{.Path}”,
“脚本”:[
“scripts/vagrant.sh”,
“scripts/vmtools.sh”,
“scripts/cleanup.sh”,
“脚本/zerodisk.sh”
]
}
],
“后处理器”:[
{
“类型”:“流浪者”,
“输出”:“INSANEWORKS-CentOS-7.0-x86_64-{{{user`version`}}-{{.Provider}}.box”
}
],
“建筑商”:[
{
“类型”:“virtualbox iso”,
“iso_url”:http://ftp.iij.ad.jp/pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-NetInstall-1503.iso",
“iso_校验和”:“498BB78789DDC7973FE14358222EB1B48521BBACA91C17BD132C7F8C903D79B3”,
“iso_校验和类型”:“sha256”,
“ssh_用户名”:“流浪者”,
“ssh_密码”:“流浪者”,
“ssh\u等待\u超时”:“45m”,
“ssh\u禁用\u代理”:“true”,
“启动命令”:[
“文本ks=http://{{.HTTPIP}}:{{{.HTTPPort}}/ks.cfg”
],
“磁盘大小”:“40000”,
“硬盘驱动器接口”:“sata”,
“guest_additions_path”:“VboxGuestaditions_{{.Version}}.iso”,
“来宾添加内容”为“7b61f523db7ba75aebc4c7bb0cae2da92674fa72299e4a006c5c67517f7d786b”,
“来宾类型”:“RedHat\u 64”,
“无头”:“真实”,
“http_目录”:“http”,
“关机命令”:“sudo/sbin/halt-p”,
“vboxmanage”:[
[“modifyvm”、“{.Name}”、“--memory”、“1024”],
[“modifyvm”、“{.Name}}”、“--CPU”、“1”]
]
}
]
}

提前感谢。

您必须在ssh连接中启用PTY。在构建器部分添加以下配置项:

"ssh_pty" : "true"
另见


provisioner部分中的“execute_command”应该是“execute_command”:“echo'vagrant'{{.Vars}}sudo-E-S sh'{.Path}'”

对于类似的错误消息-“sudo:no tty present and no askpass program specified”-我在本文中找到了解决方案:

除了在builder部分中添加“ssh”:“true”之外,还添加以下provisioner:

{
  "type": "shell",
  "execute_command": "echo '{{user `ssh_pass`}}' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'",
  "inline": [
    "echo '%sudo    ALL=(ALL)  NOPASSWD:ALL' >> /etc/sudoers"
  ]
}
堆栈:

  • 主机Mac
  • 封隔器生成器类型-virtualbox iso
  • (使用流浪汉)

Thx!我将尝试并报告这是否解决了问题这是正确的答案。我希望我昨天看到这个,因为它会节省我很多时间。为了说明需要做些什么,您需要这样的
“builders”:[{“type”:“virtualbox iso”,“communicator”:“ssh”,“ssh_pty”:“true”,
在以前的版本中,默认值为
ssh_pty=true
。自版本0.8.0以来,它已经更改。谢谢。对我来说,这是一个解决方案。我真的很惊讶,在使用packer的各种回购中,它没有变得更清晰。非常感谢。