Vagrant ssh - 命令不工作

时间:2016-11-12 20:46:52

标签: ssh vagrant homestead

我正在尝试将一个简单的命令传递给流浪者机器。

vagrant ssh -c "mysql -u root -e'CREATE DATABASE testing';"

不会创建数据库。相反,我只是通过ssh“登录”到流浪汉机器。

当我跑

时会发生同样的事情
vagrant ssh -c "touch test.txt"

我也尝试过:

  • 围绕命令的单引号
  • --command代替简写-c

有什么想法会发生什么?

修改

我将发布我的脚本,它将我的脚本与Homestead集成,因此无法真正调整流浪汉配置。

修改

由于我使用的是Homestead,因此用户和pw是不同的。应该是

vagrant ssh -c "mysql -u homestead -psecret -e'CREATE DATABASE testing;'"

不更改上面的代码,以避免与已提交的答案混淆。

但是,这并没有解决问题。如上所述,正在发生同样的事情。

4 个答案:

答案 0 :(得分:8)

这有效

vagrant ssh -- -t 'touch test.txt'

标志-t为bash创建一个伪tty使用。 这是对这个问题的答案的变体。

Running remote commands after vagrant ssh

这里有更详细的解释。

https://unix.stackexchange.com/questions/119894/single-command-to-login-to-ssh-and-run-program/119899#119899

答案 1 :(得分:0)

您可以尝试将该命令添加到引导程序文件中,然后使用

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

答案 2 :(得分:0)

你错过了一个分号。

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

答案 3 :(得分:0)

尝试直接使用ssh而不是vagrant:

ssh vagrant -c 'your command'

您可能还需要在~/.ssh/config

中定义vagrant主机
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