मेजबान से SSH को QEMU का उपयोग करके अतिथि कैसे बनाया जाए?


30

मैं मेजबान से अतिथि को qemu का उपयोग करके सेटअप कैसे करूं? जब मैं VM को किसी विशेष पैरामीटर के बिना बूट करता हूं, तो मैं पोर्ट पुनर्निर्देशन का उपयोग करने में सक्षम हूं:

/usr/bin/qemu-system-x86_64 -hda ubuntu1204 -m 512 -redir tcp:7777::8001

लेकिन जब मैं निम्नलिखित का उपयोग करके बूट करने का प्रयास करता हूं:

/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp:7777::8001

मुझे निम्न त्रुटि मिलती है और VM बूट नहीं करता है:

qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: invalid host
forwarding rule 'tcp:7777::8001'
qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: Device 'user'
could not be initialized

कृपया ध्यान दें कि मैं -netबिना किसी मुद्दे के पैरामीटर के बिना VM को बूट करने में सक्षम हूं , हालांकि, मैं मेजबान से अतिथि के लिए ssh सेटअप करना चाहता हूं। अतिथि से मेजबान तक ssh उम्मीद के अनुसार ठीक काम करता है।

संपादित करें

मैंने प्रयोग करने की कोशिश की है

-net user,hostfwd=tcp::7777-:8001

साथ ही साथ

-net user,hostfwd=tcp::7777:8001

लेकिन फिर भी त्रुटि बनी रहती है और VM बूट नहीं करता है।


जवाबों:


37

मुझे लगता है कि त्रुटि -नेट स्टेटमेंट से नहीं आती है, लेकिन:

-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char

विवरण पहले से ही पोर्ट 7777 का उपयोग करता है। पोर्ट अग्रेषण के लिए, के साथ

-net user,hostfwd=tcp::7777-:8001

यह ठीक काम करता है जब गुण धारावाहिक चैनल की स्थापना नहीं करता है।

अगर मैं सही समझता हूं, तो आप एक यूनिक्स डोमेन सॉकेट का उपयोग करके होस्ट से वीएम तक संचार करने के लिए एक गुण धारावाहिक चैनल स्थापित करना चाहते हैं?

इस मामले में, निम्नलिखित काम कर सकता है:

/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,path=/tmp/port1,server,nowait,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp::7777-:8001

संपादित करें:

VM से ssh का उपयोग करके होस्ट से कैसे कनेक्ट करें, इसका एक उदाहरण:

-net user,hostfwd=tcp::10022-:22
-net nic

यह होस्टफ़ॉर्मिंग VMH पर पोर्ट 22 के लिए लोकलहोस्ट (होस्ट) पोर्ट 10022 को मैप करता है। एक बार जब वीएम को इस तरह से शुरू किया गया था, तो आप इसे लोकलहोस्ट से इस प्रकार एक्सेस कर सकते हैं:

ssh vmuser@localhost -p10022

-नेट एनएक्स कमांड एक बहुत ही बेसिक वर्चुअल नेटवर्क इंटरफेस कार्ड को इनिशियलाइज़ करता है।


हां, आप सही कह रहे हैं, मैं मेजबान से अतिथि तक संचार स्थापित करने के लिए virtio-serial का उपयोग करने का प्रयास कर रहा हूं। VM ने होस्ट कंसोल पर एक चेतावनी देते हुए बूट किया है: Warning: vlan 0 with no nicsलेकिन जब मैं ifconfigअतिथि पर करता हूं तो मैं केवल देखता loहूं और मुझे ssh: connect to host 10.0.2.15 port 22: Connection timed outतब भी मिलता है जब मैं ssh करने की कोशिश करता हूं; जिस आईपी को मैंने ssh किया था वह 10.0.2.15 है, जो man qemu-system-x86_64कि स्थिर आईपी को असाइन नहीं किए जाने पर IP को पहले VM को सौंपा गया है। और अब अतिथि पर कोई इंटरनेट कनेक्शन नहीं है।
जॉबिन

आप जो करना चाहते हैं वह दूसरे पोर्ट पर ssh के लिए उपयोग किए गए पोर्ट 22 को मैप करना है और फिर VM को एक्सेस करने के लिए इसे होस्ट मशीन से कनेक्ट करना है। मैंने एक उदाहरण के साथ अपना उत्तर संपादित किया।
mas_kur1

संपादित उत्तर पूरी तरह से काम करता है!
dbernard

19

लॉन्च करते समय इस पर प्रयास करें qemu -redir tcp:2222::22

$ ssh -p 2222 localhost

Tcp: 2222 :: qemu लॉन्च कमांड में 22 ध्वज वर्चुअल मशीन पर होस्ट मशीन के 2222 पोर्ट को 22 (डिफ़ॉल्ट ssh पोर्ट) को मैप करता है।

फिर, अपने लोकलहोस्ट (होस्ट मशीन) पर केवल 2222 पोर्ट पर sshing, किसी भी ट्रैफ़िक को ssh 22 पोर्ट में वर्चुअल मशीन में रीडायरेक्ट करेगा, जो आपको सामान्य रूप से किसी अन्य मशीन के रूप में ssh करने की अनुमति देगा।


3
यूनिक्स और लिनक्स में आपका स्वागत है! हम लंबे उत्तर की तलाश कर रहे हैं जो कुछ स्पष्टीकरण और संदर्भ प्रदान करते हैं। बस यह मत कहो "यह कोशिश करो ..."; समझाएं कि आपका उत्तर सही क्यों है, आदर्श रूप से उद्धरणों के साथ। स्पष्टीकरण शामिल नहीं करने वाले उत्तरों को हटाया जा सकता है।
जी-मैन का कहना है कि 'मोनिका'

3
मुझे केवल यह कहने की आवश्यकता महसूस होती है कि इस उत्तर ने मुझे अन्य सभी उत्तरों से अधिक मदद की। कोई शानदार जानकारी और सबसे बढ़कर, यह काम करता है। Google-क्वेरी से उतरते समय सही "कैसे बिल्ली मैं qemu में ssh करता हूं"।
जनवरी

1
यह उत्तर वही करता है जो 99.9% लोग वास्तव में चाहते हैं। Ie होस्ट मशीन वर्चुअल मशीन के लिए ssh एक्सेस प्राप्त करती है, जिसमें होस्ट के लिए scp या समान का उपयोग करके वर्चुअल मशीन से फ़ाइलों को कॉपी करने की क्षमता शामिल है।
nullUser

1
प्रतिभाशाली! मेरा रास्पबेरी पाई कमांड अब जैसा दिखता हैqemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw console=ttyAMA0,115200" -hda 2014-01-07-wheezy-raspbian.img -nographic -redir tcp:2222::22
उत्साही

2
man qemu-system-x86_642.5.0: नोट: विरासत स्टैंड-अलोन विकल्प -tftp, -bootp, -smb और -redir अभी भी -नेट उपयोगकर्ता के लिए संसाधित और लागू होते हैं।
सिरो सेंटिल्ली 新疆 改造 iro i 事件 ''

4

OpenSSH कॉन्फ़िगरेशन ने बिल्डरोट 2016.05, QEMU 2.5.0, Ubuntu 16.04 होस्ट पर परीक्षण किया

QEMU नेटवर्क अग्रेषण के अलावा, आपको SSH को भी ठीक से सेटअप करने की आवश्यकता है, जिसे मैं यहां कवर करूंगा।

qemu_x86_64_defconfigओपनश पैकेज के साथ शुरू और सक्षम करें:

make qemu_x86_64_defconfig
echo 'BR2_PACKAGE_OPENSSH=y' >> .config
make BR2_JLEVEL=$(nproc)

इसके बाद QEMU शुरू करें:

qemu-system-x86_64 \
  -M pc \
  -append root=/dev/vda \
  -drive file=output/images/rootfs.ext2,if=virtio,format=raw \
  -enable-kvm \
  -kernel output/images/bzImage \
  -m 512 \
  -net nic,model=virtio \
  -net user,hostfwd=tcp::2222-:22

फिर अतिथि पर:

vi /etc/ssh/sshd_config

निम्नलिखित सेटिंग्स को संशोधित करें:

PermitRootLogin yes
PermitEmptyPasswords yes

और सर्वर को पुनरारंभ करें:

/etc/init.d/S50sshd restart

ऐसा इसलिए है क्योंकि यह फ़ाइल मौजूद है कि sshd डिफ़ॉल्ट रूप से शुरू होता है, यहाँ स्रोत है: https://github.com/buildroot/buildroot/blob/2018.02/package/openssh/S50sshd और प्रमुख स्टार्टअप ऑपरेशन:

/usr/bin/ssh-keygen -A
/usr/sbin/sshd
touch /var/lock/sshd

फिर मेजबान से:

ssh root@localhost -p 2222

विफलता के मामले में, पहले परीक्षण करें कि नेटवर्किंग अग्रेषण sshd से निम्न स्तर के उपकरण के साथ काम कर रहा है: उदाहरण nc -l के लिए यहां वर्णित है

अतिथि पर सर्वर लॉग की भी जाँच करें:

less /var/log/messages

फिर अंतिम प्रणाली पर आपको उस लॉग फ़ाइल के निर्माण को स्वचालित करना चाहिए : BR2_ROOTFS_OVERLAYया उत्पन्न लक्ष्य फाइल सिस्टम को अनुकूलित करना | buildroot.orgBR2_ROOTFS_POST_BUILD_SCRIPT


-1

मेरा मानना ​​है कि आपको उपयोग करने की आवश्यकता है hostfwd=tcp::7777-:8001याhostfwd=tcp::7777:8001

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