Как 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, если его еще не используется
- Перезапустите экземпляр с перезагрузкой брандмауэра из командной строки
- Скопируйте файл 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 [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
.
Ответ 12
ssh [email protected]<host>
пароль: vagrant
Примеры:
Ответ 13
Вы можете добавить конфигурацию vagrant host в вашу локальную конфигурацию ssh.
vagrant ssh-config >> ~/.ssh/config
ssh vagrant @{host}
ех. cat ~/.ssh/config
Host kmaster
HostName 127.0.0.1
User vagrant
Port 2222..
....
Ответ 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.
Получить конфигурацию ssh для vagrant-машины в vagrant-папке: vagrant ssh-config
Откройте {UserDir}/.ssh/config
и добавьте туда результат предыдущей команды. Примечание: первая строка Host default
обозначает псевдоним, который вы будете использовать позже для команды ssh
. Назовите это как ваш бродячий аппарат или реж. Если у вас есть только один бродячий каталог - вы можете назвать его Host vagrant
Ssh to vagrant: ssh vagrant
. Фамилия является псевдонимом из предыдущего шага.
Ответ 16
My Env. это Win7 + Centos. Ответ на большинство соглашений для меня не работает. После отказа после попытки ssh -p [port] [usrname]@127.0.01
, я просто использую XShell для добавления нового сеанса с брандмауэром и именем пользователя.
Работает.
Может быть, Xshell является кандидатом.