Jak ssh do vagrant bez uruchamiania "vagrant ssh"?

Chciałbym odtworzyć sposób, w jaki Vagrant loguje się do mojej maszyny Wirtualnej w skrypcie powłoki za pomocą polecenia ssh, więc tworzę alias do mojej instancji Vagrant.

Jaka jest składnia polecenia, aby użyć zwykłego polecenia ssh, aby uzyskać do niego dostęp?

Author: kenorb, 2012-06-02

15 answers

Musiałem ponownie zaimplementować "vagrant ssh", ponieważ opcja -c nie przekazywała poprawnie argumentów. To jest zasadniczo co to robi (może być więcej, ale działa dobrze w ten sposób)

#!/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 \
    "$@"

Jako jednoliterowy (z podziękowaniami dla kgadka):

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

Aby uwzględnić, gdy masz więcej niż jeden host vagrant, wybierze on żądany host, a także usunie puste linie z config (używając sed):

HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' |  awk 'NR>1 {print " -o "$1"="$2}') localhost
 95
Author: Stefano Palazzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-16 17:26:31

Jest już wiele odpowiedzi, ale wszystkie wydają się zbyt skomplikowane lub rozwiązują problemy, których asker nie miał.

Po Prostu:

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

# run ssh with the file.
ssh -F vagrant-ssh default
 107
Author: Steven Soroka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-15 17:58:37

In terminal run

vagrant ssh

In another terminal window/tab run

ps aux | grep ssh

Tam zobaczysz rzeczywiste polecenie wykonywane przez Vagranta, coś w tym stylu:

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
 39
Author: Leksat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-14 09:42:10

Wystarczy przekazać cały vagrant ssh-config jako plik konfiguracyjny do ssh z -F configfile parametr. Alias hosta do połączenia jest zdefiniowany w pierwszej linii w vagrant ssh-config; Host default oznacza, że możesz połączyć się z ssh default.

Nie widziałem opcji odczytu pliku konfiguracyjnego ze standardowego wejścia, więc poszedłem z trasą pliku tymczasowego. Oto jednolinijkowy, który następnie wyczyści tymczasowy plik $TMPDIR.vagrant-ssh-config. To musi być wykonane w tym samym katalogu co twój Vagrantfile, zakładając, że Twoje okno vagrant jest włączone i bieganie.

vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config

Uwaga: w moim systemie Mac OSX, $TMPDIR rozszerza się do /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/ (Teraz). Użyj innego zmienna , lub inny folder, jeśli nie jest ustawiony w systemie.

 17
Author: Joel Purra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:36

Jeśli nie musisz używać stdin z ssh (na przykład chcesz wykonać tylko polecenie i wylogować się) możesz użyć:

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

Ta metoda została zaproponowana w odpowiedzi na podobne pytanie na google groups .

Niestety podstawienie procesu bash również nie działa (zobacz to pytanie na unix.stackexchange więcej szczegółów).

Najlepsze opcje, jeśli chcesz interaktywnej powłoki, to utworzenie pliku tymczasowego i użyj tego z ssh -F lub użyj {[3] } zgodnie z sugestiami innych odpowiedzi.

 7
Author: tyrion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:36:30

Jeśli chcesz go skonfigurować tak, aby można było używać normalnego wiersza poleceń SSH, jak również scp itp., Możesz uruchomić vagrant ssh-config i dołączyć wyjście do domyślnej konfiguracji ssh. Jeśli zamienisz wiersz "Host default" na bardziej opisową nazwę hosta, powinieneś być gotowy.

vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box
 5
Author: Tedward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-17 21:58:45

Rozwiązałem to w bardzo prosty sposób: po uruchomieniu pola vagrant pokazuje On adres ssh w następujący sposób

SSH address: 127.0.0.1:2222

Następnie możesz połączyć się z pudełkiem za pomocą użytkownika vagrant, hosta i portu, który otrzymasz

ssh [email protected] -p 2222
 5
Author: Samer Abu Gahgah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-04 18:00:55

Wiele innych odpowiedzi zakłada, że masz zainstalowany Vagrant.

Mam Vagrant zainstalowany na Windows 10, ale nie mogę vagrant ssh ponieważ używam PuTTy jako mojego klienta SSH, którego vagrant nie akceptuje.

Plik wykonywalny ssh znaleziony w ścieżce jest klientem SSH PuTTY Link. Vagrant jest kompatybilny tylko z klientami OpenSSH SSH.

Jednak w Windows 10 mamy również Bash na Ubuntu na Windows. Więc używam tego z następującymi polecenie:

ssh [email protected] -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal

Jest dość łatwo zainstalować Vagrant na Win10-Ubuntu, ale chce również zainstalować Virtualbox z jakiegoś powodu, którego wolałbym nie robić.

N. B. próbowałem metodą ssh default -F vagrant-ssh-config, ale po prostu dostaję

Odmowa zgody (publickey, hasło).

Zgaduję, że dzieje się tak dlatego, że ścieżka IdentityFile jest ścieżką systemu Windows, podczas gdy w Bash powinna zaczynać się od /mnt/c/. Przypuszczam, że możesz po prostu napisać plik, a następnie zmodyfikować go, jeśli to zadziała lepiej dla Ciebie.

 2
Author: mpen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-24 04:19:27

ssh vagrant@<host> hasło: vagrant

Przykłady:

 2
Author: Yeke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-10 11:22:40

Vagrant przechowuje klucz prywatny w ~/.vagrant.d/insecure_private_key i używa go do łączenia się z każdą maszyną przez ssh, biorąc pod uwagę, że jest skonfigurowany do łączenia na porcie 2200 (domyślnie), byłoby to coś w stylu:

ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key

Uwaga: Upewnij się, że klucz prywatny jest własnością uruchomionego użytkownikaVagrant.

Chociaż jeśli twoim celem jest posiadanie środowiska wielozadaniowego możesz to zrobić za pomocą config.vm.define.

Oto przykład ilustrujący środowisko z 2 maszynami, jedna o nazwie web, a druga to 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

Wtedy będziesz mieć wszystkie polecenia Vagrant dostępne na komputerze, tj. vagrant ssh web i vagrant provision databases.

 1
Author: Mulkave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-30 18:57:43

Jeśli chcesz, aby tylko minimalne polecenie połączyło się z Twoją skrzynką, musisz znać port, którego używa (drukowany podczas wykonywania {[0] } lub widoczny podczas wykonywania vagrant ssh-config) i gdzie znajduje się Twój prywatny klucz SSH (widoczny również podczas wykonywania vagrant ssh-config)

To tylko kwestia podania klucza i portu:

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

 1
Author: Nico Villanueva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-25 23:45:04

Istnieje sposób, który powieli sposób, w jaki zdalny użytkownik może zalogować się do Systemu

  1. Edytuj plik Vagrantfile dla Twojej instancji dodając w

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

To dodaje prywatny adres IP dla hosta (zrób to, co chcesz w zakresie 192.168, o ile nie jest już używany

  1. Uruchom ponownie instancję za pomocą Vagrant reload z linii poleceń
  2. skopiuj plik Vagrant private_key do jakiegoś linuksowego odpowiednika, który powinieneś mieć uruchomiony na swoim pudełku (np. Cygwin jeśli na windows, używam windows 10) do katalogu domowego cygwin, zmieniając jego nazwę po drodze na coś opisującego hosta, do którego ma być użyty klucz, np.

your_virtual_host_name.pem

  1. Klucz znajdziesz pod spodem .vagrant\machines\default \ virtualbox\private_key

  2. Przejdź do katalogu domowego i wykonaj zwykły Unixowy ssh, więc

ssh -i your_virtual_hostname.pem [email protected]

Gdzie username, może być vagrant jeśli masz standardowe pole, spójrz na wyjście vagrant ssh-config dla ssh standardowe szczegóły pudełka.

That ' s it

 1
Author: Jimbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-09 14:01:52

Możesz wziąć dowolny z argumentów ssh-config i przekazać je do ssh w wierszu poleceń jako -o Key=value. Tak więc, dla prostej konfiguracji vagrant z jednym hostem (być może będziesz musiał wykonać trochę więcej pracy z grep lub perl dla konfiguracji multihost), możesz zrobić coś takiego (lub zastąpić perl z sed Jeśli chcesz):

ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost
 0
Author: Darin London,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 02:35:11

Mój Env. jest Win7 + Centos. Odpowiedź z większością nie działa dla mnie. Po niepowodzeniu po próbie ssh -p [port] [usrname]@127.0.01, po prostu używam XShell, aby dodać nową sesję z portem vagrant I nazwą użytkownika.

To działa.

Może Xshell to candinate.

 0
Author: onebraveman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-12 07:38:14

Możesz dodać SSH config dla swojego hosta vagrant do SSH config.

  1. Pobierz konfigurację ssh dla maszyny vagrant w folderze Vagrant: vagrant ssh-config

  2. Otwórz {UserDir}/.ssh/config i dołącz tam wynik z poprzedniego polecenia. Uwaga : pierwsza linia Host default oznacza alias, którego użyjesz później do polecenia ssh. Nazwij to jako swoją maszynę Włóczęgów lub reż. Jeśli masz tylko jeden vagrant dir - możesz go nazwać Host vagrant

  3. Ssh do vagrant: ssh vagrant. Nazwisko to alias od poprzedni krok.

 0
Author: FreeLightman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 18:05:14