QEMU'yu kullanarak ev sahibinden SSH'ya nasıl?


29

Qshu kullanarak ssh'ı ana bilgisayardan konuğa nasıl ayarlarım? VM'yi herhangi bir özel parametre olmadan başlattığımda aşağıdaki gibi port yeniden yönlendirmeyi kullanabiliyorum:

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

Ancak aşağıdakileri kullanarak önyüklemeye çalıştığımda:

/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

Aşağıdaki hatayı alıyorum ve VM önyükleme yapmıyor:

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

VM'yi -netparametre olmadan sorunsuz bir şekilde önyükleyebildiğimi lütfen unutmayın , ancak ssh'yi ana bilgisayardan konuğa ayarlamak istiyorum. konuktan ev sahibine ssh beklendiği gibi iyi çalışıyor.

Düzenle

Kullanmayı denedim

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

Hem de

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

ancak yine de hata devam eder ve VM önyüklenir.


Yanıtlar:


37

Bence hata -net ifadesinden gelmiyor, fakat:

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

İfade zaten 7777 numaralı bağlantı noktasını kullanır. Bağlantı noktası iletme için

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

virtio seri kanalını ayarlamadığınızda iyi çalışır.

Doğru anlıyorsam, bir Unix Domain Socket kullanarak sunucudan VM ile iletişim kurmak için virtio seri bir kanal kurmak ister misiniz?

Bu durumda, aşağıdakiler işi yapabilir:

/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

DÜZENLE:

Ssh kullanarak sunucudan VM'ye nasıl bağlanılacağına bir örnek:

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

Bu hostforwarding, yerel ana bilgisayar (ana bilgisayar) 10022 numaralı bağlantı noktasını VM'deki 22 numaralı bağlantı noktasına eşler. Sanal Makine böyle başlatıldığında, yerel ana bilgisayardan aşağıdaki gibi erişebilirsiniz:

ssh vmuser@localhost -p10022

-Net nic komutu çok temel bir sanal ağ arabirim kartını başlatır.


Evet haklısınız, hosttan misafire iletişim kurmak için virtio-seri kullanmaya çalışıyorum. VM, ana bilgisayar konsolunda bir uyarı vererek önyükleme yaptı: Warning: vlan 0 with no nicsancak ifconfigkonuklara geldiğimde sadece görüyorum love ssh: connect to host 10.0.2.15 port 22: Connection timed outssh yapmaya çalıştığımda hala alıyorum; ssh için kullandığım IP, 10.0.2.15'tir, ki man qemu-system-x86_64statik IP atanmamışsa ilk VM'ye atanan IP'ye göredir . Ve şimdi konuğa internet bağlantısı yok.
jobin

Yapmak isteyebileceğiniz şey, ssh için kullanılan 22 numaralı bağlantı noktasını başka bir bağlantı noktasında eşlemek ve daha sonra VM'ye erişmek için ana makineden bağlanmak. Cevabımı bir örnekle düzenledim.
mas_kur1

Düzenlenmiş cevap mükemmel çalışıyor!
dbernard

19

Başlatırken bunu deneyin qemu -redir tcp:2222::22

$ ssh -p 2222 localhost

Qemu launch komutundaki tcp: 2222 :: 22 bayrağı, ana makinenin 2222 bağlantı noktasını sanal makinedeki 22 numaralı bağlantı noktasına (varsayılan ssh bağlantı noktası) eşler.

Ardından, yerel ana makinenizdeki (ana makine) 2222 bağlantı noktasına sshing, herhangi bir trafiği sanal makinedeki ssh 22 bağlantı noktasına yönlendirir; bu da normalde başka herhangi bir makinede yaptığınız gibi ssh yapmanıza izin vermelidir.


3
Unix ve Linux'a Hoşgeldiniz! Bazı açıklamalar ve bağlamlar sağlayan uzun cevaplar arıyoruz. Sadece "Bunu dene ..." deme; Cevabınızın neden doğru olduğunu, ideal olarak alıntılarla açıklayın. Açıklama içermeyen cevaplar kaldırılabilir.
G-Man 'eski durumuna Monica' Diyor

3
Sadece bu cevabın yukarıdaki diğer cevaplardan daha fazla yardımcı olduğunu söylememe gerek olduğunu hissediyorum. Gereksiz bilgi yok ve hepsinden önemlisi işe yarıyor. Bir google-sorgudan inerken "heck nasıl qemu içine ssh"?
Ocak

1
Bu cevap insanların% 99,9'unun gerçekte ne istediğini yapar. Diğer bir deyişle, ana makine, ana makinenin scp veya benzerini kullanarak sanal makineye ve sanal makineden dosya kopyalama özelliği de dahil olmak üzere sanal makineye ssh erişimi sağlar.
nullUser

1
Parlak! Ahududu Pi komutum şimdi görünüyorqemu-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
enthusiasticgeek

2
man qemu-system-x86_642.5.0: Not: Eski bağımsız seçenekler -tftp, -bootp, -smb ve -redir hala işlenir ve -net kullanıcısına uygulanır.
Ciro Santilli, 21

4

OpenSSH yapılandırması Buildroot 2016.05, QEMU 2.5.0, Ubuntu 16.04 ana bilgisayarında test edildi

QEMU ağ yönlendirmesinin yanı sıra, burada kapsayacağım SSH'yi de doğru şekilde ayarlamanız gerekir.

qemu_x86_64_defconfigOpenssh paketiyle başla ve etkinleştir:

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

Sonra QEMU’yu şununla başlat:

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

Sonra konuğa:

vi /etc/ssh/sshd_config

Aşağıdaki ayarları değiştirin:

PermitRootLogin yes
PermitEmptyPasswords yes

Ve sunucuyu yeniden başlatın:

/etc/init.d/S50sshd restart

Bu dosyanın varsayılan olarak sshd'nin başlamasından dolayı var olduğu kaynaktır: işte kaynak: https://github.com/buildroot/buildroot/blob/2018.02/package/openssh/S50sshd ve anahtar başlatma işlemleri:

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

Ardından ana bilgisayardan:

ssh root@localhost -p 2222

Arıza durumunda, ilk önce ağ iletme işleminin sshd'den daha düşük bir seviye aracıyla çalıştığını test edin: örneğin nc -l burada açıklandığı gibi .

ayrıca konukların sunucu günlüklerini de kontrol edin:

less /var/log/messages

Son sistemde o günlük dosyasının oluşturulmasını BR2_ROOTFS_OVERLAYveya ile otomatikleştirmelisiniz BR2_ROOTFS_POST_BUILD_SCRIPT: Oluşturulan hedef dosya sistemini kişiselleştirme | buildroot.org


-1

Ben Kullanmak gerekmez inanıyoruz hostfwd=tcp::7777-:8001veyahostfwd=tcp::7777:8001

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.