कैसे वास्तव में "आवारा ssh" चलाने के बिना योनि को ssh?


149

मैं उस तरह से पुन: पेश करना चाहूंगा कि कैसे sshकमांड का उपयोग करके एक स्क्रिप्ट के भीतर वैगरेंट मेरे वीएम में प्रवेश करता है , इसलिए मैं अपने वैग्रेंट उदाहरण के लिए एक उपनाम बनाता हूं।

sshइसे एक्सेस करने के लिए नियमित कमांड का उपयोग करने के लिए कमांड सिंटैक्स क्या है ?


यह वास्तव में आप क्या पूछ रहे हैं, मुझे तीन अलग-अलग चीजें पूछी जा रही हैं, हो सकता है कि आप इस प्रश्न का विस्तार कर सकें और फिर ध्वज को स्थानांतरित कर सकें। धन्यवाद।
केव

3
डिफ़ॉल्ट रूप से VM का ssh पोर्ट जो -22 है, होस्ट मशीन पर 2222 पर भेजा जाएगा। मैंने 127.0.0.1 पर पोटीन-एड और एसएसएच के साथ 2222 पोर्ट किया और यह काम कर गया!
विशाल बियानी

8
यदि आप एक से अधिक बॉक्स चला रहे हैं, तो वह पोर्ट नंबर अपने आप बदल जाएगा। आप दौड़ कर सही प्राप्त कर सकते हैं vagrant ssh-config
स्टेफानो पलाज़ो

जवाबों:


108

मुझे "योनि 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 \
    vagrant@localhost \
    -p $PORT \
    "$@"

एक-लाइनर के रूप में (किग्राडेके साथ धन्यवाद):

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

3
यह उत्तर आपको निर्देशिका ("नियमित कमांड का उपयोग करके ") के sshबाहर से आपके वैग्रांत तक नहीं जाने देता है, जिस पर मैंने प्रश्न की व्याख्या की है। Vagrantfilessh
सजे

आप अपने दम पर पोर्ट सेट कर सकते हैं। इस प्रकार स्क्रिप्ट किसी भी निर्देशिका से निष्पादन योग्य होगी।
यसर

तो, उस पोर्ट को मशीन में लाने का एक तरीका क्या है? यह किस पोर्ट का कॉन्फ़िगरेशन है?
17:15 पर nroose

1
वैग्रांट auto_correct: trueसेटिंग के साथ एक अप्रयुक्त को चुनता है । इसे मैन्युअल रूप से बदलने
स्टेफानो पलाज़ो

1
मुझे पहली पंक्ति को छोड़ना पड़ा, अर्थात। Hostप्रवेश। संशोधित आदेश है:ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
kgadek

148

पहले से ही बहुत सारे उत्तर हैं, लेकिन वे सभी अत्यधिक जटिल लगते हैं या उन समस्याओं को हल करते हैं जो पूछने वाले के पास नहीं थे।

बस:

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

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

2
बहुत शानदार है। vagrant-sshमें फ़ाइल जोड़ने का मन .gitignore
शशागोरोव

5
कुछ गोले (जैसे zsh) के साथ, निम्नलिखित एक-लाइनर काम करता है:ssh -F =(vagrant ssh-config) default
liori

4
आप इस परिणाम को अपनी sshकॉन्फिग फ़ाइल में गूँज सकते हैं : vagrant ssh-config >> ~/.ssh/configइसलिए आप ssh defaultअपने सिस्टम में कहीं से भी भाग लें, defaultवीएम का नाम जहाँ आप यहाँ
adamczi

धन्यवाद @adamczi इस सरल तरीका जो भी स्वचालित समाधान जहां अतिरिक्त ssh पैरामीटर जोड़ने के लिए काम करता है -Fनहीं सीधा है
laimison

3
~/.ssh/config@Adamczi जिस तरह से आपको सुझाव देता है, उसमें एक प्रविष्टि जोड़कर आप विजुअल स्टूडियो कोड रिमोट - एसएसएच एक्सटेंशन को वैग्रेंट वीएम में भेज सकते हैं और फाइलों को संपादित कर सकते हैं और दूरस्थ विकास कर सकते हैं। बस CMD-SHIFT-P तब "रिमोट-SSH: होस्ट से कनेक्ट करें ..." और ssh .config प्रविष्टि जो आपने अभी जोड़ी है, वह स्वचालित रूप से सूचीबद्ध है - आप बस इसे चुनें और वॉइला, vscode आपके दूरस्थ योनि vm से जोड़ता है! कॉन्फ़िगरेशन प्रविष्टि दृष्टिकोण के बिना, मुझे यकीन नहीं है कि मैंने इसे vscode के साथ कैसे किया होगा।
अबुलका

52

टर्मिनल रन में

vagrant ssh

एक और टर्मिनल विंडो / टैब रन में

ps aux | grep ssh

वहां आपको वैग्रांत द्वारा निष्पादित वास्तविक कमान दिखाई देगी, कुछ इस तरह से:

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

यदि आप किसी अन्य कारणों से किसी SQL GUI कनेक्शन, जैसे Sequel Pro, के लिए अपने योनि के होस्ट की आवश्यकता है, तो बढ़िया ट्रिक। यह एक मुझे बचाओ!
एटमॉक्स

19

बस पैरामीटर के साथ vagrant ssh-configएक कॉन्फ़िगर फ़ाइल के रूप में पूरे पास करें । से कनेक्ट करने के लिए मेजबान उपनाम पहली पंक्ति में परिभाषित किया गया है ; आप के साथ कनेक्ट कर सकते हैं इसका मतलब है ।ssh-F configfilevagrant ssh-configHost defaultssh default

मुझे मानक इनपुट से कॉन्फ़िग फ़ाइल पढ़ने का विकल्प नहीं दिखाई दे रहा है, इसलिए अस्थायी फ़ाइल मार्ग के साथ चला गया। यहाँ एक-लाइनर है जो बाद में अस्थायी $TMPDIR.vagrant-ssh-configफ़ाइल को भी साफ करता है । इसे आपकी उसी निर्देशिका में क्रियान्वित करने की आवश्यकता है Vagrantfile, जैसे कि आप मानते हैं कि आपका योनि-द्वार ऊपर और ऊपर चल रहा है।

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

नोट: मेरे मैक OSX सिस्टम पर, (अभी) $TMPDIRफैलता है /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/। यदि यह आपके सिस्टम पर सेट नहीं है, तो दूसरे चर या किसी अन्य फ़ोल्डर का उपयोग करें ।


3
यदि आप बैश या zsh का उपयोग कर रहे हैं, तो प्रक्रिया प्रतिस्थापन एक कमांड के आउटपुट को दूसरे में पारित करने का एक सरल तरीका है। बैश: ssh -F <(vagrant ssh-config) zsh: zsh प्रक्रिया प्रतिस्थापन ssh -F =(vagrant ssh-config)
myeeshen

@myshen: @tyrion प्रक्रिया द्वारा जवाब के अनुसार प्रतिस्थापन ssh -Fबाश में काम नहीं करता है - जिस तरह से आप उल्लेख करते हैं, उसे zsh में काम करना चाहिए।
जोएल पुर्रा

डांग, मुझे वास्तव में सीखने की ज़रूरत है कि वास्तव में योनि का उपयोग कैसे किया जाए, न कि बैश का उल्लेख करने के लिए।
स्पेंसर विलियम्स

14

मैंने इसे बहुत सरल तरीके से हल किया: जब आप योनि बॉक्स शुरू करते हैं तो यह इस तरह से ssh पता दिखाता है

SSH address: 127.0.0.1:2222

फिर आप योनि उपयोगकर्ता, होस्ट और आपके द्वारा प्राप्त पोर्ट का उपयोग करके बॉक्स से जुड़ सकते हैं

ssh vagrant@127.0.0.1 -p 2222

1
अच्छा! और ध्यान दें कि आम तौर पर, योनि उपयोगकर्ता के लिए पासवर्ड हैvagrant
ब्रैड पार्क्स

7

आप उपयोग stdin करने की जरूरत नहीं है के साथ sshआप इस्तेमाल कर सकते हैं (उदाहरण के लिए आप सिर्फ एक आदेश और लॉगआउट पर अमल करना चाहते हैं):

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

यह विधि Google समूहों पर एक समान प्रश्न के जवाब में सुझाई गई थी ।

दुर्भाग्य से बैश प्रक्रिया प्रतिस्थापन या तो काम नहीं करता है ( अधिक विवरण के लिए unix.stackexchange पर यह प्रश्न देखें)।

आपके पास सबसे अच्छा विकल्प, यदि आप एक इंटरैक्टिव शेल चाहते हैं, तो एक अस्थायी फ़ाइल बनाने और अन्य उत्तरों द्वारा सुझाए अनुसार ssh -Fउपयोग या उपयोग करना awkहै।


5

यदि आप इसे बस सेट करना चाहते हैं तो आप सामान्य ssh कमांडलाइन, साथ ही साथ scp और का उपयोग कर सकते हैं, आप vagrant ssh-configअपने डिफ़ॉल्ट ssh कॉन्फ़िगरेशन में आउटपुट को चला सकते हैं और जोड़ सकते हैं । यदि आप अधिक विवरणात्मक होस्टनाम के साथ लाइन "होस्ट डिफ़ॉल्ट" की जगह लेते हैं, तो आपको जाने के लिए अच्छा होना चाहिए।

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

बिल्कुल डॉक्टर ने जो आदेश दिया ... Thx।
15

4

यदि आप बस अपने बॉक्स से कनेक्ट होने के लिए नंगे न्यूनतम कमांड चाहते हैं, तो आपको उस पोर्ट को जानना होगा जो वह उपयोग कर रहा है (मुद्रित करते समय vagrant up, या दिखाई दे रहा है vagrant ssh-config) और जहां आपकी निजी SSH कुंजी (करते समय भी दिखाई दे रही है vagrant ssh-config)

फिर यह कुंजी और पोर्ट प्रदान करने की बात है:

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


4

बहुत सारे अन्य उत्तर मानते हैं कि आपके पास वैग्रान्ट स्थापित है।

मेरे पास विंडोज 10 पर vagrant sshवैग्रंट स्थापित है, लेकिन मैं नहीं कर सकता क्योंकि मैं अपने एसएसएच क्लाइंट के रूप में पुट्टी का उपयोग कर रहा हूं, जो योनि स्वीकार नहीं करेगा।

sshPATH में पाया जाने वाला निष्पादन योग्य एक PuTTY लिंक SSH क्लाइंट है। वैग्रांट केवल ओपनएसएसएच एसएसएच ग्राहकों के साथ संगत है।

हालाँकि, विंडोज 10 में हमारे पास विंडोज पर उबंटू भी बैश है। इसलिए, मैं निम्नलिखित कमांड के साथ इसका उपयोग करता हूं:

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

Win10-Ubuntu पर वैग्रांट को स्थापित करना काफी आसान है, लेकिन यह भी चाहता है कि आप किसी कारण से वर्चुअलबॉक्स स्थापित करें, जो मैं नहीं करूंगा।

एनबी मैं ssh default -F vagrant-ssh-configविधि के साथ कोशिश की है, लेकिन मैं अभी मिलता है

अनुमति से इनकार (publickey, पासवर्ड)।

मैं यह अनुमान लगा रहा हूं क्योंकि IdentityFileपथ एक विंडोज पथ है, जबकि बैश में, इसके साथ शुरू होना चाहिए /mnt/c/। मुझे लगता है कि आप केवल फ़ाइल को लिख सकते हैं और फिर इसे संशोधित कर सकते हैं यदि यह आपके लिए बेहतर काम करता है।


4

आप अपने स्थानीय ssh कॉन्फिगरेशन में वैरिएंट होस्ट कॉन्फ़िगरेशन जोड़ सकते हैं।

  1. योनि ssh-config >> ~ / .ssh / config

  2. ssh योनि @ {मेजबान}

पूर्व। बिल्ली ~ /। ssh / config

Host kmaster
  HostName 127.0.0.1
  User vagrant
  Port 2222..
  ....
  • ssh योनि @ kmaster

3

एक तरीका है जो बताता है कि सिस्टम में एक दूरस्थ उपयोगकर्ता कैसे लॉगिन कर सकता है

  1. अपने उदाहरण में Vagrantfile को जोड़कर संपादित करें

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

यह होस्ट के लिए एक निजी आईपी जोड़ता है (इसे 192.168 रेंज में आप जो चाहते हैं, उसे लंबे समय तक उपयोग न करें

  1. कमांड लाइन से आवारा पुनः लोड के साथ उदाहरण को पुनः आरंभ करें
  2. आपके बॉक्स पर चल रहे कुछ लिनक्स समकक्ष के लिए योनि प्राइवेट_की फ़ाइल को कॉपी करें (जैसे कि सिग्विन अगर खिड़कियों पर, मैं विंडोज़ 10 का उपयोग करता हूं) आपकी साइबरविन होम निर्देशिका में, इसका नाम बदलकर होस्ट का वर्णन करने वाली किसी चीज़ का उपयोग करना है। उदाहरण के लिए

your_virtual_host_name.pem

  1. आपको .vagrant \ Machines \ default \ virtualbox \ Private_key के अंतर्गत कुंजी मिलेगी

  2. अपने घर निर्देशिका में जाओ और अपने सामान्य यूनिक्स ssh करो, इसलिए

ssh -i your_virtual_hostname.pem username@192.168.33.10

जहां उपयोगकर्ता नाम, अच्छी तरह से योनि हो सकता है यदि आपके पास एक मानक बॉक्स है, तो बॉक्स के लिए ssh मानक विवरण के लिए योनि ssh-config के आउटपुट को देखें।

बस


धन्यवाद, योनि से कुंजी फ़ाइल को कॉपी करने के आपके विचार के लिए धन्यवाद, मुझे एहसास हुआ कि मुझे क्या समस्या थी - मैंने लिनक्स पर libvirt प्रदाता का उपयोग किया । यह महत्वपूर्ण है क्योंकि libvirt प्रदाता के साथ आपको sudo के साथ योनि को इनिशियलाइज़ करने की आवश्यकता होती है और .vagrantफ़ोल्डर के भीतर सभी फाइलें रूट के स्वामित्व में होती हैं। और फ़ाइल पर अनुमतियाँ rw ------- थीं, इसलिए केवल रूट के पास कुंजी फ़ाइल को पढ़ने की अनुमति थी। शायद यह किसी के लिए मददगार हो।
टॉमसएच

2

वैग्रांत निजी कुंजी को स्टोर ~/.vagrant.d/insecure_private_keyकरता है और इसे प्रत्येक मशीन से कनेक्ट करने के लिए उपयोग करता है, यह sshदेखते हुए कि यह पोर्ट 2200 (डिफ़ॉल्ट) पर कनेक्ट करने के लिए कॉन्फ़िगर किया गया है, यह कुछ इस तरह होगा:

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

नोट: सुनिश्चित करें कि निजी कुंजी चलाने वाले के स्वामित्व में हैVagrant

यद्यपि यदि आपका उद्देश्य एक बहु-मशीन वातावरण है तो आप इसका उपयोग कर सकते हैं config.vm.define

यहाँ 2 मशीनों के साथ पर्यावरण को दर्शाने वाला एक उदाहरण है, एक को बुलाया गया है 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


क्या मैं एक मशीन को 2 मशीन के विन्यास में बदल सकता हूं, अगर मैं पुरानी मशीन को "प्राथमिक" बनाऊं?
nroose

2

ssh vagrant@<host> कुंजिका: vagrant

उदाहरण:

  • ssh vagrant@vagrant.local

  • या आईपी की जाँच करने के बाद (अंदर से, उपयोग करके vagrant ssh)ssh vagrant@172.28.128.3


2

आप ssh config में अपने योनि होस्ट के लिए ssh config जोड़ सकते हैं।

  1. योनि फ़ोल्डर में योनि मशीन के लिए ssh कॉन्फिगर करें: vagrant ssh-config

  2. {UserDir}/.ssh/configपिछली कमांड से परिणाम खोलें और वहां जोड़ें। नोट : पहली पंक्ति का Host defaultअर्थ है उपनाम जो आप sshकमांड के लिए बाद में उपयोग करेंगे । इसे अपनी योनि मशीन या डायर नाम दें। यदि आपके पास केवल एक योनि dir है - तो आप इसे नाम दे सकते हैंHost vagrant

  3. योनि को Ssh ssh vagrant:। पिछले चरण से अंतिम नाम अन्य नाम है।


1

आप किसी भी ssh-configतर्क को ले सकते हैं , और उन्हें कमांडलाइन पर ssh के रूप में पास कर सकते हैं -o Key=value। इसलिए, एक साधारण एक-होस्ट योनि सेटअप के लिए (आपको मल्टीहोस्ट सेटअप के साथ grepया थोड़ा अधिक काम करना पड़ सकता है perl), आप निम्न की तरह कुछ कर सकते हैं (या यदि आप चाहें तो प्रतिस्थापित perlकरें sed):

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

0

माई एनव। Win7 + Centos है। सबसे समझौते के साथ जवाब मेरे लिए काम नहीं करता है। कोशिश करने के बाद असफल होने के बाद ssh -p [port] [usrname]@127.0.01, मैं सिर्फ योनि बंदरगाह और उपयोगकर्ता नाम के साथ एक नया सत्र जोड़ने के लिए XShell का उपयोग करता हूं।

यह काम करता हैं।

शायद Xshell एक कैंडिनेट है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.