Vagrant shell 命令未在客户机操作系统上运行

Vagrant shell 命令未在客户机操作系统上运行

我有以下 Vagrant 文件:

Vagrant.configure("2") do |config|
    config.vm.box = "laravel/homestead"
    config.vm.provision "shell", inline: <<-SHELL
        printf "\n\nClientAliveInterval 3\nClientAliveCountMax 2" >> /etc/ssh/sshd_config
        service ssh restart
    SHELL
end

它运行得很好,但是当我查看/etc/ssh/sshd_config我所做的更改的内容时却不见了。但是当我printf "\n\nClientAliveInterval 3\nClientAliveCountMax 2" >> /etc/ssh/sshd_config通过 CLI(好吧,通过sudo bash)进行操作时,它运行得很好。

我正在运行 Vagrant 2.2.7 和 Hyper-V,以及 Windows 10 版本 1909。

知道为什么 Vagrant 文件没有写入该文件吗?

答案1

尝试按照以下方式操作:

sh -c "printf '\n\nClientAliveInterval 3\nClientAliveCountMax 2' >> /etc/ssh/sshd_config";

如果这不起作用,请像这样以 sudo 形式运行它:

sudo sh -c "printf '\n\nClientAliveInterval 3\nClientAliveCountMax 2' >> /etc/ssh/sshd_config";

我的理解是,它将sh -c把双引号中的字符串作为命令运行。至于为什么没有它就不能运行sh -c……不知道。但也许你可以使用你的配置,然后像 sudo 一样运行相同的命令,如下所示:

sudo printf "\n\nClientAliveInterval 3\nClientAliveCountMax 2" >> /etc/ssh/sshd_config
sudo service ssh restart

如果所有这些方法仍然不起作用,那么更大的问题可能是你试图使用“定界符”格式。我建议这样做:

$script = <<-SHELL
printf "\n\nClientAliveInterval 3\nClientAliveCountMax 2" >> /etc/ssh/sshd_config
service ssh restart
SHELL

Vagrant.configure("2") do |config|
    config.vm.box = "laravel/homestead"
    config.vm.provision "shell", inline: $script
end

或者你也可以这样做:

Vagrant.configure("2") do |config|
    config.vm.box = "laravel/homestead"
    config.vm.provision "shell",
      inline: "printf '\n\nClientAliveInterval 3\nClientAliveCountMax 2' >> /etc/ssh/sshd_config' && service ssh restart"
end

阅读内联脚本的 shell 配置过程请点击此处在官方 Vagrant 文档中。

相关内容