Как 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
существует способ, который реплицирует, как удаленный пользователь может войти в систему
- отредактируйте Vagrantfile для вашего экземпляра, добавив в
config.vm.network "private_network", ip: "192.168.33.10"
это добавляет частный IP-адрес для хоста (сделайте его тем, что вы хотите в диапазоне 192.168, пока он еще не используется
- перезапустите экземпляр с помощью vagrant reload из командной строки
- скопируйте файл vagrant private_key в некоторый эквивалент Linux, который вы должны запуск на вашем поле (например, Cygwin если на windows, я использую windows 10) в ваш домашний каталог cygwin, переименовывая его по пути к чему-то, описывающему хост, для которого должен использоваться ключ, например
your_virtual_host_name.pem
вы найдете ключ под .vagrant\machines\default\virtualbox\private_key
перейдите в свой домашний каталог и сделайте свой обычный 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.
получить SSH config для машины vagrant в папке vagrant:
vagrant ssh-config
открыть
{UserDir}/.ssh/config
и добавьте туда результат предыдущей команды. Примечание: первая строкаHost default
означает псевдоним, который вы будете использовать в дальнейшем для . Назовите его своей бродячей машиной или реж. Если у вас есть только один бродяга dir - вы можете назвать егоHost vagrant
Ssh бродяге:
ssh vagrant
. Фамилия-псевдоним предыдущего шага.