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

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

Каков синтаксис команды для использования регулярной команды ssh для ее доступа?

Ответ 1

Мне пришлось повторно реализовать "бродячий 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 \
    [email protected] \
    -p $PORT \
    "[email protected]"

Как однострочный (с благодарностью к килодеку):

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

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

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

Ответ 2

Там уже много ответов, но все они кажутся чересчур сложными или решают проблемы, о которых не слышал ассер.

просто:

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

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

Ответ 3

В терминальном прогоне

vagrant ssh

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

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

Ответ 4

Просто передайте весь vagrant ssh-config в качестве файла конфигурации в ssh с параметром -F configfile. Идентификатор хоста для подключения определяется в первой строке в vagrant ssh-config; Host default означает, что вы можете подключиться к ssh default.

Я не мог видеть вариант для чтения конфигурационного файла со стандартного ввода, поэтому пошел с файлом temp file. Здесь однострочный, который впоследствии очищает временный файл $TMPDIR.vagrant-ssh-config. Он должен быть выполнен в том же каталоге, что и ваш 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/ (прямо сейчас). Используйте еще один variable или другую папку, если она не установлена ​​в вашей системе.

Ответ 5

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

SSH address: 127.0.0.1:2222

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

ssh [email protected] -p 2222

Ответ 6

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

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

Этот метод был предложен в ответ на аналогичный вопрос google groups.

К сожалению bash замещение процесса не работает (см. этот вопрос на unix.stackexchange для более подробной информации).

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

Ответ 7

Если вы просто хотите настроить его, чтобы вы могли нормально использовать обычную командную строку 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

Ответ 8

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

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

ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]

Ответ 9

Многие другие ответы предполагают, что у вас установлен Vagrant.

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

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

Однако в 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, но я просто получаю

Разрешение отклонено (публикация, пароль).

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

Ответ 10

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

  • Отредактируйте Vagrantfile для добавления вашего экземпляра в

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

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

  1. Перезапустите экземпляр с перезагрузкой брандмауэра из командной строки
  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 [email protected]

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

Что он

Ответ 11

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

ssh [email protected] -p 2200 -i ~/.vagrant.d/insecure_private_key

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

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

Здесь пример, иллюстрирующий среду с двумя машинами, называемую 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.

Ответ 13

Вы можете добавить конфигурацию vagrant host в вашу локальную конфигурацию ssh.

  1. vagrant ssh-config >> ~/.ssh/config

  2. ssh vagrant @{host}

ех. cat ~/.ssh/config

Host kmaster
  HostName 127.0.0.1
  User vagrant
  Port 2222..
  ....
  • ssh vagrant @kmaster

Ответ 14

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

ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/[email protected]/; s/\s/\=/;s/@/ /;s/\n/ /'` [email protected]

Ответ 15

Вы можете добавить конфигурацию ssh для вашего бродячего хоста в конфигурацию ssh.

  1. Получить конфигурацию ssh для vagrant-машины в vagrant-папке: vagrant ssh-config

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

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

Ответ 16

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

Работает.

Может быть, Xshell является кандидатом.