Vagrant ssh --command 不工作
Vagrant ssh --command not working
我正在尝试向 vagrant 机器传递一个简单的命令。
vagrant ssh -c "mysql -u root -e'CREATE DATABASE testing';"
没有创建数据库。相反,我只是通过 ssh 'logged in' 到 vagrant 机器。
当我 运行
时也会发生同样的事情
vagrant ssh -c "touch test.txt"
我也尝试过:
- 命令周围的单引号
--command
而不是 shorthand -c
知道发生了什么事吗?
编辑
我要分发我的脚本,它将把我的脚本与 Homestead 集成,所以不能真正调整 vagrant 配置。
编辑
由于我使用的是 Homestead,因此用户和密码不同。应该是
vagrant ssh -c "mysql -u homestead -psecret -e'CREATE DATABASE testing;'"
不更改上面的代码以避免与已经提交的答案混淆。
但是,这并不能解决问题。如上所述,同样的事情正在发生。
您可以尝试将该命令添加到您的 bootstrap 文件中,然后使用
vagrant provision
.
Vargant 文件示例
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.provider "virtualbox" do |v|
v.memory = 1024
end
config.vm.synced_folder "./", "/vagrant", id: "vagrant-root",
owner: "vagrant",
group: "www-data",
mount_options: ["dmode=777,fmode=777"]
end
示例 bootstrap.sh 使用您的命令在其中创建一个 postgres 数据库。您必须确保安装了正确的 mysql 软件包。
#!/usr/bin/env bash
add-apt-repository ppa:ondrej/php5-5.6
apt-add-repository ppa:chris-lea/redis-server
apt-get update
apt-get install -y --force-yes python-software-properties
apt-get install -y --force-yes postgresql postgresql-contrib
apt-get install -y --force-yes redis-server
apt-get install -y --force-yes apache2
apt-get install -y --force-yes php5
apt-get install -y --force-yes php5-imagick
apt-get install -y --force-yes php5-redis
apt-get install -y --force-yes php5-mcrypt
apt-get install -y --force-yes phppgadmin
apt-get install -y --force-yes php5-gd
apt-get install -y --force-yes php5-intl
apt-get install -y --force-yes php5-sqlite
apt-get install -y --force-yes php5-curl
apt-get install -y --force-yes git
if ! [ -L /var/www ]; then
rm -rf /var/www
mkdir /var/www
ln -fs /vagrant /var/www/vagrant-referron-com
#
sed -i "s#DocumentRoot /var/www/html#DocumentRoot /var/www#g" /etc/apache2/sites-available/000-default.conf
fi
sed -i "s#AllowOverride None#AllowOverride All#g" /etc/apache2/sites-available/000-default.conf
sed -i "s#AllowOverride None#AllowOverride All#g" /etc/apache2/apache2.conf
# copy the phppgadmin configuration
cp -f /vagrant/development/postgres/phppgadmin /etc/apache2/conf.d/
cp -f /vagrant/development/postgres/phppgadmin.conf /etc/apache2/conf-enabled/
cp -f /vagrant/development/postgres/config.inc.php /etc/phppgadmin/
# create the postgres database and user
sudo -u postgres createdb sometestdatabase
sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password 'postgres';"
# calling mysql to create your testing database.
sudo mysql -u root -e 'CREATE DATABASE testing ;'
# enable server to listen to port 8080
cp -f /vagrant/development/ports.conf /etc/apache2/
# install the other apache modules
a2enmod rewrite
php5enmod mcrypt
apachectl restart
你少了一个分号。
vagrant ssh -c "mysql -u root -e'CREATE DATABASE testing;'"
参考:https://laracasts.com/discuss/channels/servers/cant-create-a-mysql-database-when-sshing-into-vagrant
尝试直接使用 ssh 而不是 vagrant:
ssh vagrant -c 'your command'
您可能还需要在 ~/.ssh/config
中定义 vagrant host
Host vagrant
HostName 127.0.0.1
User vagrant
Port 2222
IdentityFile ~/.vagrant.d/insecure_private_key
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentitiesOnly yes
LogLevel FATAL
ForwardAgent yes
这个有效
vagrant ssh -- -t 'touch test.txt'
标志 -t 创建一个伪 tty 供 bash 使用。
这是这个问题答案的变体。
Running remote commands after vagrant ssh
这里有更详细的解释。
我正在尝试向 vagrant 机器传递一个简单的命令。
vagrant ssh -c "mysql -u root -e'CREATE DATABASE testing';"
没有创建数据库。相反,我只是通过 ssh 'logged in' 到 vagrant 机器。
当我 运行
时也会发生同样的事情vagrant ssh -c "touch test.txt"
我也尝试过:
- 命令周围的单引号
--command
而不是 shorthand-c
知道发生了什么事吗?
编辑
我要分发我的脚本,它将把我的脚本与 Homestead 集成,所以不能真正调整 vagrant 配置。
编辑
由于我使用的是 Homestead,因此用户和密码不同。应该是
vagrant ssh -c "mysql -u homestead -psecret -e'CREATE DATABASE testing;'"
不更改上面的代码以避免与已经提交的答案混淆。
但是,这并不能解决问题。如上所述,同样的事情正在发生。
您可以尝试将该命令添加到您的 bootstrap 文件中,然后使用
vagrant provision
.
Vargant 文件示例
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.provider "virtualbox" do |v|
v.memory = 1024
end
config.vm.synced_folder "./", "/vagrant", id: "vagrant-root",
owner: "vagrant",
group: "www-data",
mount_options: ["dmode=777,fmode=777"]
end
示例 bootstrap.sh 使用您的命令在其中创建一个 postgres 数据库。您必须确保安装了正确的 mysql 软件包。
#!/usr/bin/env bash
add-apt-repository ppa:ondrej/php5-5.6
apt-add-repository ppa:chris-lea/redis-server
apt-get update
apt-get install -y --force-yes python-software-properties
apt-get install -y --force-yes postgresql postgresql-contrib
apt-get install -y --force-yes redis-server
apt-get install -y --force-yes apache2
apt-get install -y --force-yes php5
apt-get install -y --force-yes php5-imagick
apt-get install -y --force-yes php5-redis
apt-get install -y --force-yes php5-mcrypt
apt-get install -y --force-yes phppgadmin
apt-get install -y --force-yes php5-gd
apt-get install -y --force-yes php5-intl
apt-get install -y --force-yes php5-sqlite
apt-get install -y --force-yes php5-curl
apt-get install -y --force-yes git
if ! [ -L /var/www ]; then
rm -rf /var/www
mkdir /var/www
ln -fs /vagrant /var/www/vagrant-referron-com
#
sed -i "s#DocumentRoot /var/www/html#DocumentRoot /var/www#g" /etc/apache2/sites-available/000-default.conf
fi
sed -i "s#AllowOverride None#AllowOverride All#g" /etc/apache2/sites-available/000-default.conf
sed -i "s#AllowOverride None#AllowOverride All#g" /etc/apache2/apache2.conf
# copy the phppgadmin configuration
cp -f /vagrant/development/postgres/phppgadmin /etc/apache2/conf.d/
cp -f /vagrant/development/postgres/phppgadmin.conf /etc/apache2/conf-enabled/
cp -f /vagrant/development/postgres/config.inc.php /etc/phppgadmin/
# create the postgres database and user
sudo -u postgres createdb sometestdatabase
sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password 'postgres';"
# calling mysql to create your testing database.
sudo mysql -u root -e 'CREATE DATABASE testing ;'
# enable server to listen to port 8080
cp -f /vagrant/development/ports.conf /etc/apache2/
# install the other apache modules
a2enmod rewrite
php5enmod mcrypt
apachectl restart
你少了一个分号。
vagrant ssh -c "mysql -u root -e'CREATE DATABASE testing;'"
参考:https://laracasts.com/discuss/channels/servers/cant-create-a-mysql-database-when-sshing-into-vagrant
尝试直接使用 ssh 而不是 vagrant:
ssh vagrant -c 'your command'
您可能还需要在 ~/.ssh/config
Host vagrant
HostName 127.0.0.1
User vagrant
Port 2222
IdentityFile ~/.vagrant.d/insecure_private_key
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentitiesOnly yes
LogLevel FATAL
ForwardAgent yes
这个有效
vagrant ssh -- -t 'touch test.txt'
标志 -t 创建一个伪 tty 供 bash 使用。 这是这个问题答案的变体。
Running remote commands after vagrant ssh
这里有更详细的解释。