Gerçekten "vagrant ssh" çalıştırmadan vagrant ssh nasıl?


149

Ben Vagrant komut kullanarak bir kabuk komut dosyası içinde VM benim günlükleri nasıl yeniden ssholuşturmak istiyorum, bu yüzden Vagrant örneğime bir diğer ad oluşturun.

Erişmek için normal sshkomutu kullanmak için komut sözdizimi nedir ?


Aslında sorduğunuz şey, sorulan üç farklı şey görüyorum, belki de soruyu genişletip sonra göç etmek için işaretleyebilirsiniz. Teşekkürler.
Kev

3
Varsayılan olarak VM'nin -22 olan ssh portu ana makinede 2222'ye iletilecektir. 127.0.0.1 ve port 2222'yi SSH ile macunladım ve işe yaradı!
Vishal Biyani

8
Birden fazla kutu çalıştırıyorsanız, bu port numarası otomatik olarak değişecektir. Koşarak doğru olanı alabilirsiniz vagrant ssh-config.
Stefano Palazzo

Yanıtlar:


108

Ben "vagrant ssh" yeniden uygulamak zorundayım çünkü bu -cseçenek argümanları düzgün bir şekilde aktarmadı. Bu temelde yaptığı şeydir (daha fazlası olabilir, ancak bu şekilde iyi çalışır)

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

Tek astar olarak (kgadek sayesinde):

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

Birden fazla vagrant ana makineniz olduğunda bunu hesaba katmak için, bu istenen ana makineyi ve yapılandırmadaki boş satırları seçecektir (sed kullanarak):

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

3
Bu cevap sshVagrant'ınıza Vagrantfiledizinin dışından ("normal sshkomutu kullanarak ") izin vermiyor .
sjy

Bağlantı noktasını kendi başınıza ayarlayabilirsiniz. Böylece komut dosyası herhangi bir dizinden yürütülebilir.
Yser

Peki, bu bağlantı noktasını makineye girmenin bir yolu yapan nedir? Hangi portun yapılandırması nerede?
nroose

1
Vagrant auto_correct: trueayar ile kullanılmayan bir tane seçer . İşte manuel olarak nasıl değiştirileceği hakkında daha fazla bilgi
Stefano Palazzo

1
İlk satırı atlamak zorunda kaldım, yani. Hostgirişi. Değiştirilmiş komut:ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
kgadek

148

Zaten birçok cevap var, ama hepsi aşırı karmaşık görünüyor veya askerin sahip olmadığı sorunları çözüyor.

basitçe:

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

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

2
Harika. İçine vagrant-sshdosya eklemek için zihin .gitignore.
sashaegorov

5
Bazı mermilerle (örneğin zsh), aşağıdaki tek astar çalışır:ssh -F =(vagrant ssh-config) default
liori

4
Sen yankı senin içine bu sonucu isteyebilirsiniz sshyapılandırma dosyası: vagrant ssh-config >> ~/.ssh/config, sadece koşmak böylece ssh defaultsisteminizdeki herhangi bir yerden, nerede defaultsizin gibi belirtebildiklerinden VM adıdır burada
adamczi

Teşekkürler @adamczi Bu, ekstra ssh parametresi eklemenin -Fbasit olmadığı otomatik çözümler için de çalışan basitleştirilmiş bir yoldur
laimison

3
~/.ssh/config@Adamczi'nin önerdiği şekilde bir giriş ekleyerek , Vagrant VM'ye ssh eklemek ve dosyaları düzenlemek ve uzaktan geliştirme yapmak için Visual Studio Code Remote - SSH uzantısını kullanabilirsiniz. Basitçe CMD-SHIFT-P sonra "Remote-SSH: Ana Bilgisayara Bağlan ..." ve az önce eklediğiniz ssh .config girişi otomatik olarak listelenir - sadece seçin ve voila, vscode uzak vagrant vm'nize bağlanır! Yapılandırma giriş yaklaşımı olmadan, vscode ile bunu nasıl yapacağımdan emin değilim.
abulka

52

Terminal çalışmasında

vagrant ssh

Başka bir terminal penceresinde / sekme çalıştırmasında

ps aux | grep ssh

Orada Vagrant tarafından yürütülen gerçek komutu göreceksiniz, böyle bir şey:

ssh vagrant@127.0.0.1 -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

Sequel Pro gibi bir SQL GUI bağlantısı gibi başka nedenlerle ssh için vagrant sunucunuza ihtiyacınız varsa büyük hile. Bu beni kurtarsın!
Atomox

19

Sadece bütününü geçmesi vagrant ssh-configiçin bir yapılandırma dosyası olarak sshbirlikte -F configfileparametresi. Bağlanılacak ana bilgisayar diğer adı, ilk satırda tanımlanır vagrant ssh-config; Host defaultbağlanabileceğiniz anlamına gelir ssh default.

Standart dosyadan yapılandırma dosyasını okumak için bir seçenek göremedim, bu yüzden geçici dosya yolu ile gitti. İşte geçici $TMPDIR.vagrant-ssh-configdosyayı daha sonra temizleyen bir astar . VagrantfileVagrant kutunuzun çalışır durumda olduğunu varsayarak , aynı dizinde yürütülmesi gerekir.

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

Not: Mac OSX sistemimde (şu anda) olarak $TMPDIRgenişliyor /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/. Sisteminizde ayarlanmamışsa başka bir değişken veya başka bir klasör kullanın .


3
Bash veya zsh kullanıyorsanız, işlem değiştirme , bir komutun çıktısını diğerine geçirmenin daha basit bir yoludur. bash: ssh -F <(vagrant ssh-config) zsh: zsh süreç ikamesi ssh -F =(vagrant ssh-config)
myeeshen

@myshen: @tyrion işleminin cevabına göre ikame ssh -Fbash için işe yaramaz - bahsettiğiniz yol zsh cinsinden çalışmalıdır.
Joel Purra

Dang, gerçekten bahs bahsetmiyorum bile, gerçekten vagrant nasıl kullanılacağını öğrenmek gerekir.
Spencer Williams

14

Bunu çok basit bir şekilde çözdüm: vagrant kutusunu başlattığınızda ssh adresini şöyle gösterir

SSH address: 127.0.0.1:2222

kutuya vagrant kullanıcı, ana bilgisayar ve aldığınız bağlantı noktasını kullanarak bağlanabilirsiniz

ssh vagrant@127.0.0.1 -p 2222

1
Güzel! ve not o tipik serseri kullanıcı için şifrevagrant
Brad Parks

7

Eğer kullanım stdin'e gerekmiyorsa ile sshsiz kullanabilirsiniz (örneğin sadece bir komut ve çıkış, yürütmek istiyorum):

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

Bu yöntem, Google gruplarında benzer bir soruya yanıt olarak önerildi .

Ne yazık ki bash işlemi ikamesi de işe yaramıyor ( daha fazla bilgi için unix.stackexchange'teki bu soruya bakın).

Etkileşimli bir kabuk istiyorsanız, sahip olduğunuz en iyi seçenekler bir geçici dosya oluşturmak ve bunu diğer yanıtların önerdiği şekilde ssh -Fkullanmak veya kullanmaktır awk.


5

Sadece normal ssh komut satırının yanı sıra scp ve benzerlerini normal şekilde kullanabilmek için ayarlamak isterseniz vagrant ssh-config, çıkışı çalıştırabilir ve varsayılan ssh yapılandırmanıza ekleyebilirsiniz. "Ana makine varsayılanı" satırını daha açıklayıcı bir ana makine adıyla değiştirirseniz, devam etmeniz iyi olur.

vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box

Tam olarak doktorun emrettiği şey ... Teşekkürler.
xenoid

4

Yalnızca minimum minimum komutun kutunuza bağlanmasını istiyorsanız, kullandığı bağlantı noktasını (yaparken vagrant upveya görünürken yazdırılır vagrant ssh-config) ve özel SSH anahtarınızın (yaparken de görünür vagrant ssh-config) bilmeniz gerekir.

O zaman sadece anahtar ve bağlantı noktasını sağlama meselesi:

ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1


4

Diğer birçok yanıt Vagrant'ın kurulu olduğunu varsayar.

vagrant sshVagrant'ı Windows 10'a yükledim, ancak yapamam çünkü PuTTy'yi SSH istemcim olarak kullanıyorum, ki bu vagrant kabul etmeyecek.

sshPATH içinde çalıştırılabilir bulduğu PuTTY Bağlantı SSH istemcisidir. Vagrant yalnızca OpenSSH SSH istemcileriyle uyumludur.

Ancak, Windows 10'da Windows'ta Ubuntu'da Bash var. Yani, sadece aşağıdaki komutla kullanıyorum:

ssh vagrant@127.0.0.1 -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal

Vagrant'ı Win10-Ubuntu'ya yüklemek yeterince kolaydır, ancak Virtualbox'ı bir nedenden dolayı yüklemenizi ister, ki bunu yapmak istemem.

Not ssh default -F vagrant-ssh-configMetot ile denedim , ama sadece

İzin reddedildi (publickey, şifre).

Sanırım bu, IdentityFileyolun bir Windows yolu olması nedeniyle, Bash'de ise başlamalıdır /mnt/c/. Sanırım dosyayı yazıp sizin için daha iyi çalışıyorsa değiştirebilirsiniz.


4

Yerel ssh yapılandırmanıza vagrant ana bilgisayar yapılandırması ekleyebilirsiniz.

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

  2. ssh vagrant @ {host}

ex. cat ~ / .ssh / config

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

3

Uzak bir kullanıcının sisteme nasıl giriş yapabileceğini yinelemenin bir yolu var

  1. Örneğin eklenmesi için Vagrantdosyasını düzenleyin

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

Bu, ana bilgisayar için özel bir IP ekler (henüz kullanılmadığı sürece 192.168 aralığında istediğinizi yapın)

  1. Komut satırından vagrant yeniden yüklemesi ile örneği yeniden başlatın
  2. Vagrant private_key dosyasını kutunuzda çalıştırmanız gereken bazı Linux eşdeğerine kopyalayın (örn. Windows'ta Cygwin, Windows 10 kullanıyorum) cygwin ana dizininize yeniden adlandırın ve anahtarın kullanılacağı ana bilgisayarı açıklayan bir şeye yol boyunca yeniden adlandırın örneğin

your_virtual_host_name.pem

  1. Anahtarı .vagrant \ machines \ default \ virtualbox \ private_key altında bulabilirsiniz

  2. Ana dizininize gidin ve her zamanki Unix ssh'ınızı yapın,

ssh -i your_virtual_hostname.pem username@192.168.33.10

Burada kullanıcı adı, standart bir kutunuz varsa vagrant olabilir, kutunun ssh standart detayları için vagrant ssh-config çıkışına bakın.

Bu kadar


Teşekkür ederim, anahtar dosyasını başka bir yerde vagrant'tan kopyalama fikriniz sayesinde, hangi problemi yaşadığımı fark ettim - Linux'ta libvirt sağlayıcısını kullandım . Bu önemlidir çünkü libvirt sağlayıcısı ile sudo ile vagrant başlatmanız gerekir ve .vagrantbu nedenle klasördeki tüm dosyalar root'a aittir. Ve dosyadaki izinler rw ------- idi, bu yüzden sadece root'un anahtar dosyasını okuma izinleri vardı. Belki bu herkes için yararlı olabilir.
TomasH

2

Vagrant özel anahtarı depolar ve 2200 numaralı bağlantı noktasına (varsayılan) bağlanmak üzere yapılandırıldığını göz önünde bulundurarak ~/.vagrant.d/insecure_private_keyher makineye bağlanmak için kullanır ssh:

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

Not: özel anahtarın çalışan kullanıcının sahibi olduğundan emin olunVagrant .

Amacınız bir olması ise olsa çok makine ortamında kullandığınız yapabilirsiniz config.vm.define.

Burada 2 makineleri denilen biriyle bir ortam gösteren bir örnek webve diğeri 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

O zaman makine başına tüm Vagrant komutlarına sahip olacaksınız, yani vagrant ssh webve vagrant provision databases.


Eski makineyi "birincil" yaparsam, bir makine yapılandırmasını 2 makine yapılandırmasına dönüştürebilir miyim?
nroose

2

ssh vagrant@<host> parola: vagrant

Örnekler:

  • ssh vagrant@vagrant.local

  • veya IP'yi kontrol ettikten sonra (içeriden, kullanarak vagrant ssh)ssh vagrant@172.28.128.3


2

Vagrant ana makineniz için ssh config ssh config komutunu ekleyebilirsiniz.

  1. Vagrant klasöründe vagrant makinesi için ssh config alın: vagrant ssh-config

  2. Bir {UserDir}/.ssh/configönceki komutun sonucunu açın ve ekleyin. Not : ilk satır Host default, daha sonra sshkomut için kullanacağınız diğer ad anlamına gelir . Onu serseri makinen ya da dir olarak adlandır. Yalnızca bir tane vagrant dizininiz varsa - adlandırabilirsinizHost vagrant

  3. Şşşt ssh vagrant. Soyadı, önceki adımdaki takma addır.


1

Bağımsız ssh-configdeğişkenlerden herhangi birini alıp komut satırında ssh öğesine iletebilirsiniz -o Key=value. Yani, basit bir tek konak serseri kurulumu için (eğer biraz daha işi yapmak gerekebilir grepveya perlaşağıdaki gibi bir şey yapabilirsiniz multihost kurulumu için) (veya değiştirin perlile sedisterseniz):

ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost

0

Çevrem Win7 + Centos. Çoğu anlaşma ile cevap benim için işe yaramıyor. ssh -p [port] [usrname]@127.0.01Denedikten sonra başarısız olduktan sonra , vagrant bağlantı noktası ve kullanıcı adıyla yeni bir oturum eklemek için sadece XShell kullanıyorum.

İşe yarıyor.

Belki Xshell bir kandidendir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.