Chciałbym odtworzyć sposób, w jaki Vagrant loguje się do mojej maszyny wirtualnej w skrypcie powłoki za pomocą ssh
polecenia, więc tworzę alias do mojej instancji Vagrant.
Jaka jest składnia polecenia, aby użyć zwykłego ssh
polecenia, aby uzyskać do niego dostęp?
shell
command-line
ssh
vagrant
Kevin Burke
źródło
źródło
vagrant ssh-config
.Odpowiedzi:
Musiałem ponownie zaimplementować "vagrant ssh", ponieważ ta
-c
opcja nie przekazywała poprawnie argumentów. To w zasadzie to, co robi (może być więcej, ale w ten sposób działa dobrze)W wersji jednowarstwowej (dzięki kgadek):
Aby uwzględnić, gdy masz więcej niż jednego hosta włóczęgi, wybierze żądanego hosta, a także puste wiersze z konfiguracji (używając seda):
źródło
ssh
dotrzeć do twojego Vagranta spozaVagrantfile
katalogu ("używając zwykłejssh
komendy"), tak jak zinterpretowałem pytanie.auto_correct: true
ustawieniem. Oto więcej informacji na temat ręcznej zmianyHost
wpis. Zmodyfikowane polecenie to:ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
Jest już wiele odpowiedzi, ale wszystkie wydają się zbyt skomplikowane lub rozwiązują problemy, których pytający nie miał.
po prostu:
źródło
vagrant-ssh
plik.gitignore
.zsh
) Działa następującassh -F =(vagrant ssh-config) default
ssh
pliku konfiguracyjnymvagrant ssh-config >> ~/.ssh/config
ssh default
default
-F
nie jest proste~/.ssh/config
w sposób sugerowany przez @adamczi, możesz następnie użyć rozszerzenia Visual Studio Code Remote - SSH do ssh na Vagrant VM i edytować pliki i wykonywać zdalne programowanie. Po prostu CMD-SHIFT-P, a następnie "Remote-SSH: Połącz z hostem ...", a właśnie dodany wpis ssh .config jest automatycznie wyświetlany - po prostu go wybierz i voila, vscode łączy się ze zdalnym vagrantem vm! Bez podejścia do wprowadzania konfiguracji nie jestem pewien, jak inaczej zrobiłbym to z vscode.W biegu terminala
W innym oknie / karcie terminala uruchom
Tam zobaczysz rzeczywiste polecenie wykonane przez Vagranta, coś takiego:
źródło
Po prostu przekaż całość
vagrant ssh-config
jako plik konfiguracyjnyssh
z-F configfile
parametrem. Alias hosta do połączenia jest zdefiniowany w pierwszym wierszuvagrant ssh-config
;Host default
oznacza, że możesz się połączyćssh default
.Nie widziałem opcji odczytu pliku konfiguracyjnego ze standardowego wejścia, więc poszedłem z trasą pliku tymczasowego. Oto jedna linijka, która
$TMPDIR.vagrant-ssh-config
później czyści również plik tymczasowy . Musi być wykonany w tym samym katalogu, co twójVagrantfile
, zakładając, że twój włóczęga działa i działa.Uwaga: w moim systemie Mac OSX
$TMPDIR
rozszerza się do/var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/
(w tej chwili). Użyj innej zmiennej lub innego folderu, jeśli nie jest ustawiony w systemie.źródło
ssh -F <(vagrant ssh-config)
zsh: zsh zastępowanie procesussh -F =(vagrant ssh-config)
ssh -F
w bash - sposób, w jaki wspomniałeś, powinien jednak działać w zsh.Rozwiązałem to w bardzo prosty sposób: kiedy uruchamiasz pudełko włóczęgów, pokazuje on adres ssh w ten sposób
następnie możesz połączyć się ze skrzynką, używając użytkownika włóczęgi, hosta i otrzymanego portu
źródło
vagrant
Jeśli nie potrzebujesz używać stdin z
ssh
(na przykład chcesz wykonać tylko polecenie i wylogować się), możesz użyć:Ta metoda została zasugerowana w odpowiedzi na podobne pytanie w grupach google .
Niestety podstawianie procesów bash również nie działa (zobacz to pytanie na unix.stackexchange, aby uzyskać więcej informacji).
Najlepsze opcje, jakie masz, jeśli chcesz mieć interaktywną powłokę, to utworzenie pliku tymczasowego i użycie go z innymi odpowiedziami
ssh -F
lub użycie goawk
zgodnie z sugestiami innych odpowiedzi.źródło
Jeśli chcesz tylko ustawić to tak, aby móc używać normalnego wiersza poleceń ssh, a także scp i tym podobnych, możesz uruchomić
vagrant ssh-config
i dołączyć dane wyjściowe do domyślnej konfiguracji ssh. Jeśli zamienisz wiersz „Host default” na bardziej opisową nazwę hosta, wszystko będzie dobrze.źródło
Jeśli chcesz, aby minimalne polecenie łączyło się z twoim urządzeniem, musisz znać port, którego używa (drukowany podczas wykonywania
vagrant up
lub widocznyvagrant ssh-config
) i gdzie jest twój prywatny klucz SSH (widoczny również podczas wykonywaniavagrant ssh-config
)Wtedy wystarczy podać klucz i port:
ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key [email protected]
źródło
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 włóczęga nie zaakceptuje.Jednak w Windows 10 mamy również Bash na Ubuntu na Windowsie. Więc po prostu używam tego z następującym poleceniem:
Wystarczająco łatwo jest zainstalować Vagrant na Win10-Ubuntu, ale z jakiegoś powodu chce również, abyś zainstalował Virtualbox, czego wolałbym nie robić.
NB próbowałem z tą
ssh default -F vagrant-ssh-config
metodą, ale po prostu otrzymałemDomyślam się, że dzieje się tak, ponieważ
IdentityFile
ścieżka jest ścieżką systemu Windows, podczas gdy w Bash powinna zaczynać się od/mnt/c/
. Przypuszczam, że możesz po prostu zapisać plik, a następnie zmodyfikować go, jeśli to działa lepiej.źródło
Możesz dodać konfigurację hosta vagrant do swojej lokalnej konfiguracji ssh.
vagrant ssh-config >> ~ / .ssh / config
ssh vagrant @ {host}
dawny. cat ~ / .ssh / config
źródło
Istnieje sposób, który powiela sposób, w jaki zdalny użytkownik może zalogować się do systemu
config.vm.network "private_network", ip: "192.168.33.10"
Spowoduje to dodanie prywatnego adresu IP dla hosta (ustaw go tak, jak chcesz w zakresie 192.168, o ile nie jest już używany
your_virtual_host_name.pem
Klucz znajdziesz w folderze .vagrant \ machines \ default \ virtualbox \ private_key
Idź do swojego katalogu domowego i wykonaj swoje zwykłe uniksowe ssh, więc
ssh -i your_virtual_hostname.pem [email protected]
gdzie nazwa_użytkownika, może być włóczęgą, jeśli masz standardowe pudełko, spójrz na wyjście vagrant ssh-config dla standardowych szczegółów ssh dla tego pudełka.
Otóż to
źródło
.vagrant
zatem wszystkie pliki w folderze są własnością roota. A uprawnienia do pliku to rw -------, więc tylko root miał uprawnienia do odczytu pliku klucza. Może to mogłoby być pomocne dla każdego.Vagrant przechowuje klucz prywatny
~/.vagrant.d/insecure_private_key
i używa go do łączenia się z każdą maszynąssh
, biorąc pod uwagę, że jest skonfigurowany do łączenia się na porcie 2200 (domyślnie), wyglądałoby to tak:ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key
Uwaga: upewnij się, że klucz prywatny należy do uruchomionego użytkownika
Vagrant
.Chociaż jeśli Twoim celem jest stworzenie środowiska wielomaszynowego, możesz to zrobić za pomocą
config.vm.define
.Oto przykład ilustrujący środowisko z 2 maszynami, jedną wywołaną,
web
a drugądatabases
:Wtedy będziesz mieć wszystkie polecenia Vagrant dostępne na urządzeniu, czyli
vagrant ssh web
avagrant provision databases
.źródło
ssh vagrant@<host>
hasło:vagrant
Przykłady:
ssh [email protected]
lub po sprawdzeniu IP (od wewnątrz za pomocą
vagrant ssh
)ssh [email protected]
źródło
Możesz dodać konfigurację ssh dla swojego hosta włóczęgi do konfiguracji ssh.
Pobierz konfigurację ssh dla maszyny vagrant w folderze vagrant:
vagrant ssh-config
Otwórz
{UserDir}/.ssh/config
i dołącz tam wynik z poprzedniego polecenia. Uwaga : pierwsza liniaHost default
oznacza alias, którego będziesz używać później dossh
polecenia. Nazwij go swoją włóczęgą maszyną lub reż. Jeśli masz tylko jeden film włóczęgów - możesz go nazwaćHost vagrant
Ssh do Vagrant:
ssh vagrant
. Nazwisko to alias z poprzedniego kroku.źródło
Możesz wziąć dowolny z
ssh-config
argumentów i przekazać go do ssh w wierszu poleceń jako-o Key=value
. Tak więc, za prosta-gospodarza Vagrant konfiguracji (może trzeba zrobić trochę więcej pracować zgrep
lubperl
do multihost Setup), można zrobić coś jak następuje (lub wymienićperl
wsed
razie potrzeby):źródło
Moja kop. to Win7 + Centos. Odpowiedź, która jest najbardziej zgodna, nie działa dla mnie. Po niepowodzeniu po wypróbowaniu po
ssh -p [port] [usrname]@127.0.01
prostu używam XShell, aby dodać nową sesję z portem włóczęgi i nazwą użytkownika.To działa.
Może Xshell jest kandydatem.
źródło