Как подключиться по SSH к бродячим, фактически не работает "залет СШ"?
Я хотел бы воспроизвести способ, как Vagrant входит в мою виртуальную машину в сценарии оболочки с помощью ssh команда, поэтому я создаю псевдоним для моего экземпляра Vagrant.
каков синтаксис команды для использования обычного для доступа к нему?
15 ответов:
мне пришлось повторно реализовать "vagrant 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 \ "$@"как ОДН-вкладыш (с спасибо кгадек):
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 [email protected] -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
Если вам не нужно использовать 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затем вы можете подключиться к коробке с помощью бродячего пользователя, хоста и порта, который вы получаете
ssh [email protected] -p 2222
многие другие ответы предполагают, что у Вас установлен Бродяга.
у меня Vagrant установлен на Windows 10, но я не могу
vagrant sshпотому что я использую PuTTy в качестве своего SSH-клиента, который vagrant не примет.The
sshисполняемый файл, найденный в пути, является клиентом SSH PuTTY Link. Vagrant совместим только с клиентами OpenSSH SSH.однако, в Windows 10 у нас также есть Bash на Ubuntu на Windows. Итак, я просто использую это с помощью следующая команда:
ssh [email protected] -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatalдостаточно легко установить Vagrant на Win10-Ubuntu, но он также хочет, чтобы вы по какой-то причине установили Virtualbox, чего я бы предпочел не делать.
N. B. Я пробовал с
ssh default -F vagrant-ssh-configметод, но я простоотказано в разрешении (publickey,пароль).
Я предполагаю, что это потому, что
IdentityFileпуть-это путь Windows, тогда как в Bash он должен начинаться с/mnt/c/. Я полагаю, вы могли бы просто написать из файла, а затем изменить его, если это работает лучше для вас.
ssh vagrant@<host>пароль:vagrantпримеры:
или после проверки IP (изнутри, используя
vagrant ssh)ssh [email protected]
залетный хранит закрытый ключ в
~/.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 ssh webиvagrant provision databases.
если вы просто хотите, чтобы минимальная команда подключалась к вашему ящику, вам нужно знать порт, который он использует (печатается при выполнении
vagrant up, или видимым делатьvagrant ssh-config) и где ваш личный ключ SSH (также виден при выполненииvagrant ssh-config)тогда это просто вопрос предоставления ключа и порта:
ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]
существует способ, который воспроизводит, как удаленный пользователь может войти в систему
- редактировать 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
вы найдете ключ под .бродяга\машины\по умолчанию\virtualbox\private_key
перейдите в свой домашний каталог и сделайте свой обычный Unix ssh, так что
ssh -i your_virtual_hostname.pem [email protected]где имя пользователя, вполне может быть vagrant если у вас есть стандартная коробка, посмотрите на вывод vagrant ssh-config для стандартных деталей ssh для коробки.
вот это
вы можете взять любой из
ssh-configАргументы, и передать их в ssh в командной строке как-o Key=value. Итак, для простой настройки одного хоста vagrant (возможно, вам придется немного больше работать с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-это кандинат.
вы можете добавить SSH config для вашего бродячего хоста в SSH config.
получить SSH config для бродячей машины в папке vagrant:
vagrant ssh-configоткрыть
{UserDir}/.ssh/configи добавить туда результат от предыдущей команды. Примечание: первая строкаHost defaultозначает псевдоним, который вы будете использовать в дальнейшем для . Назовите его своей бродячей машиной или реж. Если у вас есть только один бродячий dir-вы можете назвать егоHost vagrantSsh бродяге:
ssh vagrant. Фамилия-это псевдоним из предыдущего шага.
Comments