gpt4 book ai didi

linux - scp 无法从 vagrant box 中的 bash 脚本运行

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:42 25 4
gpt4 key购买 nike

我正在使用 vagrant 1.6.3 版本和 vagrant 的默认 linux box。

我的盒子运行良好,所以我在 vagrantfile 中添加了一个外部 shell 脚本。该脚本包含此命令。

自定义.sh文件

#!/bin/bash

DEPLOY_PASSWORD="xxxxx" &&
DB_NAME="test-sync.sql.gz" &&
apt-get install sshpass &&
sshpass -p "$DEPLOY_PASSWORD" scp -P 22 -v user@test01.admin.com:"~/mysql_dumps/$DB_NAME" "./"

我尝试手动运行该命令,它运行良好,没有任何问题,但它不适用于 bash 脚本。这是我通过运行 vagrant provision 得到的错误日志:

 The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
chmod +x /tmp/vagrant-shell && /tmp/vagrant-shell test-sync.sql.gz

Vagrant 文件

    Vagrant.configure("2") do |config|

# Load config JSON.
config_json = JSON.parse(File.read("config.json"))

# Prepare base box.
config.vm.box = "precise32"
config.vm.box_url = "http://files.vagrantup.com/precise32.box"

# Configure networking.
config.vm.network :private_network, ip: config_json["vm"]["ip"]

# Configure forwarded ports.
config.vm.network "forwarded_port", guest: 35729, host: 35729, protocol: "tcp", auto_correct: true
config.vm.network "forwarded_port", guest: 8983, host: 8983, protocol: "tcp", auto_correct: true
# User defined forwarded ports.
config_json["vm"]["forwarded_ports"].each do |port|
config.vm.network "forwarded_port", guest: port["guest_port"],
host: port["host_port"], protocol: port["protocol"], auto_correct: true
end

# Customize provider.
config.vm.provider :virtualbox do |vb|
# RAM.
vb.customize ["modifyvm", :id, "--memory", config_json["vm"]["memory"]]

# Synced Folders.
config_json["vm"]["synced_folders"].each do |folder|
case folder["type"]
when "nfs"
config.vm.synced_folder folder["host_path"], folder["guest_path"], type: "nfs"
# This uses uid and gid of the user that started vagrant.
config.nfs.map_uid = Process.uid
config.nfs.map_gid = Process.gid
else
config.vm.synced_folder folder["host_path"], folder["guest_path"]
end
end
end

# Run initial shell script.
config.vm.provision :shell, :path => "chef/shell/initial.sh"

# Customize provisioner.
config.vm.provision :chef_solo do |chef|
chef.json = config_json
chef.custom_config_path = "chef/solo.rb"
chef.cookbooks_path = ["chef/cookbooks/berks", "chef/cookbooks/core", "chef/cookbooks/custom"]
chef.data_bags_path = "chef/data_bags"
chef.roles_path = "chef/roles"
chef.add_role "vdd"
end

# Run final shell script.
config.vm.provision :shell, :path => "chef/shell/final.sh", :args => config_json["vm"]["ip"]
#custom tasks
config.vm.provision :shell, :path => "custom.sh", :args => config_json["test_config"]["db_name"]
end

最佳答案

我不使用 sshpass(在脚本中使用明文密码的想法让我感到畏缩),但手册页似乎建议在脚本中你应该设置变量 SSHPASS 而不是使用-p 咒语……

EXAMPLES
Run rsync over SSH using password authentication, passing the password on the command line:
rsync --rsh='sshpass -p 12345 ssh -l test' host.example.com:path .
To do the same from a bourne shell script in a marginally less exposed way:
SSHPASS=12345 rsync --rsh='sshpass -e ssh -l test' host.example.com:path .

关于linux - scp 无法从 vagrant box 中的 bash 脚本运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25295170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com