Как ssh для vagrant без фактического запуска "vagrant ssh"?

Я хотел бы воспроизвести способ, как Vagrant входит в мою виртуальную машину в сценарии оболочки, используя ssh команда, поэтому я создаю псевдоним для моего экземпляра Vagrant.

каков синтаксис команды для использования обычного для доступа к нему?

15 ответов


мне пришлось повторно реализовать "бродячий ssh", потому что это -c опция не передавала аргументы должным образом. Это в принципе что он делает (может быть больше, но он отлично работает таким образом)

#!/bin/sh
PORT=$(vagrant ssh-config | grep Port | grep -o '[0-9]\+')
ssh -q \
    -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -i ~/.vagrant.d/insecure_private_key \
    vagrant@localhost \
    -p $PORT \
    "$@"

как однострочный (с благодарностью kgadek):

ssh $(vagrant ssh-config | awk 'NR>1 {print " -o ""="}') localhost

чтобы учесть, когда у вас есть более одного бродячего хоста, это выберет желаемый хост, а также удалит пустые строки из конфигурации (используя sed):

HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' |  awk 'NR>1 {print " -o ""="}') localhost

есть много ответов, но все они кажутся слишком сложными или решить проблемы Аскер не было.

просто:

# save the config to a file
vagrant ssh-config > vagrant-ssh

# run ssh with the file.
ssh -F vagrant-ssh default

в терминале run

vagrant ssh

в другом окне терминала/вкладке run

ps aux | grep ssh

там вы увидите фактическую команду, выполненную Vagrant, что-то вроде этого:

ssh vagrant@127.0.0.1 -p 2222 -o Compression=yes -o DSAAuthentication=yes -o LogLevel=FATAL -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i ~/.vagrant.d/less_insecure_private_key -o ForwardAgent=yes

просто пройти весь vagrant ssh-config в файле config для ssh С -F configfile далее. Он должен быть выполнен в том же каталоге, что и ваш Vagrantfile, предполагая, что вы бродячий ящик запущен и работает.

vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config

Примечание: В моей системе Mac OSX, $TMPDIR увеличивается до /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/ (прямо сейчас). Использовать другое переменная или другая папка, если она не установлена в вашей системе.


Если вам не нужно использовать stdin С ssh (например, вы хотите выполнить только команду и выйти из системы) вы можете использовать:

vagrant ssh-config --host default | ssh -F /dev/stdin default

этот метод был предложен в ответ на подобный вопрос на google группы.

к сожалению замена процесса bash не работает (см. Этот вопрос на unix.клиент StackExchange для более подробной информации).

самые лучшие варианты вы имеете, если вы хотите интерактивная оболочка, чтобы создать временный файл и использовать его с ssh -F или использовать awk как предложено другими ответами.


Если вы просто хотите настроить его так, чтобы вы могли использовать нормальную обычную командную строку ssh, а также scp и такие, вы можете запустить vagrant ssh-config и добавить в конфигурацию SSH по умолчанию. Если вы замените строку "Host default" более описательным именем хоста, вам должно быть хорошо идти.

vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box

Я решил это очень простым способом: когда вы запускаете окно vagrant, он показывает адрес ssh, как это

SSH address: 127.0.0.1:2222

затем вы можете подключиться к коробке с помощью пользователя vagrant, хоста и порта, который вы получаете

ssh vagrant@127.0.0.1 -p 2222

многие другие ответы предполагают, что у Вас установлен Бродяга.

у меня установлен Vagrant на Windows 10, но я не могу vagrant ssh потому что я использую PuTTy как мой SSH-клиент, который бродяга не примет.

на ssh исполняемый файл, найденный в пути, является клиентом SSH PuTTY Link. Vagrant совместим только с клиентами OpenSSH SSH.

однако в Windows 10 у нас также есть Bash на Ubuntu на Windows. Так что, я просто использую это с следующая команда:

ssh vagrant@127.0.0.1 -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal

достаточно легко установить Vagrant на Win10-Ubuntu, но он также хочет, чтобы вы установили Virtualbox по какой-то причине, чего я бы предпочел не делать.

Б. Н. Я пробовал с ssh default -F vagrant-ssh-config метод, но я просто

разрешение отказано (publickey, пароль).

Я предполагаю, что это потому, что IdentityFile путь-это путь Windows, тогда как в Bash он должен начинаться с /mnt/c/. Полагаю, ты можешь просто написать из файла, а затем изменить его, если это работает лучше для вас.


ssh vagrant@<host> пароль: vagrant

примеры:

  • ssh vagrant@vagrant.local

  • или после проверки IP (изнутри, используя vagrant ssh) ssh vagrant@172.28.128.3


залетный хранит закрытый ключ в ~/.vagrant.d/insecure_private_key и использует его для подключения к каждой машине через ssh, учитывая, что он настроен на подключение по порту 2200 (по умолчанию) это будет что-то вроде:

ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key

Примечание: убедитесь, что закрытый ключ принадлежит пользователю, работающему Vagrant.

хотя, если ваша цель состоит в том, чтобы иметь мульти-машинная среда вы можете сделать это, используя config.vm.define.

вот пример, иллюстрирующий среду с 2 машинами, одна из которых называется web и другое databases:

config.vm.define 'web', primary: true do |web|
        web.vm.box = 'CentOS64'
        web.vm.hostname = 'vic-develop'
        web.vm.network 'private_network', ip: '192.168.50.10', virtualbox__intnet: true
        web.vm.synced_folder '../code', '/var/www/project', :mount_options => ["dmode=777,fmode=777"]

        web.vm.provision 'ansible' do |ansible|
            ansible.playbook = 'development-web.yml'
            ansible.sudo = true
        end
end

config.vm.define 'databases' do |db|
    db.vm.box = 'CentOS64'

    db.vm.network 'private_network', ip: '192.168.50.20', virtualbox__intnet: true
    db.vm.network :forwarded_port, guest: 3306, host: 8206

    db.vm.provision 'ansible' do |ansible|
        ansible.playbook = 'development-db.yml'
        ansible.sudo = true
    end
end

тогда у вас будут все команды Vagrant, доступные на машине, т. е. vagrant ssh web и vagrant provision databases.


если вы просто хотите, чтобы команда bare minimum подключалась к вашей коробке, вам нужно знать порт, который она использует (печатается при выполнении vagrant up, или видимым делать vagrant ssh-config) и где ваш закрытый ключ SSH (также видимый при выполнении vagrant ssh-config)

тогда это просто вопрос предоставления ключа и порта:

ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1


существует способ, который реплицирует, как удаленный пользователь может войти в систему

  1. отредактируйте Vagrantfile для вашего экземпляра, добавив в

config.vm.network "private_network", ip: "192.168.33.10"

это добавляет частный IP-адрес для хоста (сделайте его тем, что вы хотите в диапазоне 192.168, пока он еще не используется

  1. перезапустите экземпляр с помощью vagrant reload из командной строки
  2. скопируйте файл vagrant private_key в некоторый эквивалент Linux, который вы должны запуск на вашем поле (например, Cygwin если на windows, я использую windows 10) в ваш домашний каталог cygwin, переименовывая его по пути к чему-то, описывающему хост, для которого должен использоваться ключ, например

your_virtual_host_name.pem

  1. вы найдете ключ под .vagrant\machines\default\virtualbox\private_key

  2. перейдите в свой домашний каталог и сделайте свой обычный Unix ssh, так что

ssh -i your_virtual_hostname.pem username@192.168.33.10

где имя пользователя, вполне может быть vagrant если у вас есть стандартная коробка, посмотрите на вывод vagrant ssh-config для стандартных деталей ssh для коробки.

вот это


вы можете взять любой из ssh-config Аргументы и передайте их ssh в командной строке как -o Key=value. Итак, для простой настройки бродяги с одним хостом (возможно, вам придется сделать немного больше работы с grep или perl для настройки multihost), вы можете сделать что-то вроде следующего (или заменить perl С sed если вы хотите):

ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost

Мой Env. такое Win7 + в CentOS. Ответ с наибольшим согласием не работает для меня. После неудачи после попытки ssh -p [port] [usrname]@127.0.01, Я просто использую XShell для добавления нового сеанса с портом vagrant и именем пользователя.

это работает.

может Xshell-это candinate.


вы можете добавить SSH config для вашего бродячего хоста в ssh config.

  1. получить SSH config для машины vagrant в папке vagrant:vagrant ssh-config

  2. открыть {UserDir}/.ssh/config и добавьте туда результат предыдущей команды. Примечание: первая строка Host default означает псевдоним, который вы будете использовать в дальнейшем для . Назовите его своей бродячей машиной или реж. Если у вас есть только один бродяга dir - вы можете назвать его Host vagrant

  3. Ssh бродяге:ssh vagrant. Фамилия-псевдоним предыдущего шага.