shell - not - receive packet: type 51




Как ssh к бродяге без фактического запуска «бродячего ssh»? (10)

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

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


В терминальном режиме

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

Вы можете взять любой из аргументов 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]

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

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

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


Мне пришлось повторно реализовать «бродячий 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

Многие другие ответы предполагают, что у вас установлен 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, чего я бы предпочел не делать.

NB Я пробовал использовать метод ssh default -F vagrant-ssh-config , но я просто получаю

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

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


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

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


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

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

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

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

  1. Перезапустите экземпляр с перезагрузкой брандмауэра из командной строки
  2. Скопируйте файл vagrant private_key на какой-либо эквивалент Linux, который должен быть запущен на вашем ящике (например, Cygwin, если на окнах, я использую 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 для этого поля.

это оно



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 vagrant ssh web и vagrant provision databases .







vagrant