
qemu를 사용하여 호스트에서 게스트로 SSH를 설정하는 방법은 무엇입니까? 가상 머신을 시작할 때 다음과 같은 특별한 매개변수 없이 포트 리디렉션을 사용할 수 있습니다.
/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
다음 오류가 발생하고 가상 머신이 시작되지 않습니다.
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을 문제 없이 시작할 수 있지만 -net
호스트에서 게스트로 SSH를 설정하고 싶습니다. 게스트에서 호스트로의 SSH가 예상대로 잘 작동합니다.
편집하다
나는 사용해 보았습니다.
-net user,hostfwd=tcp::7777-:8001
또한
-net user,hostfwd=tcp::7777:8001
그러나 오류가 지속되고 가상 머신이 시작되지 않습니다.
답변1
내 생각에 오류는 문에서 발생한 것이 아니라 다음 -net
에서 발생한 것 같습니다.
-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char
이 포트는 이 명령문에서 이미 사용되었습니다 7777
. 포트 포워딩의 경우
-net user,hostfwd=tcp::7777-:8001
virtio 직렬 채널을 설정하지 않고도 제대로 작동합니다.
제가 올바르게 이해했다면 Unix 도메인 소켓을 사용하여 호스트에서 가상 머신으로 통신하기 위해 virtio 직렬 채널을 설정하시겠습니까?
이 경우 다음 작업이 수행됩니다.
/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,path=/tmp/port1,server=on,wait=off,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp::7777-:8001
SSH를 사용하여 호스트에서 VM에 연결하는 방법의 예:
-net user,hostfwd=tcp::10022-:22
-net nic
이 호스트 전달은 localhost(호스트) 포트 10022를 VM의 포트 22에 매핑합니다. 가상 머신이 이와 같이 시작되면 다음과 같이 localhost에서 액세스할 수 있습니다.
ssh vmuser@localhost -p10022
-net nic 명령은 매우 기본적인 가상 네트워크 인터페이스 카드를 초기화합니다.
답변2
이것을 qemu 네트워크 구성에 추가하세요:
,hostfwd=tcp::2222-:22
예를 들어
qemu -net nic -net user,hostfwd=tcp::2222-:22
이 tcp::2222-:22
플래그는 호스트의 포트 2222를 가상 머신의 포트 22(기본 SSH 포트)에 매핑합니다.
그런 다음 SSH를 통해 로컬 호스트(호스트)의 포트 2222에 연결하기만 하면 모든 트래픽이 가상 머신의 SSH 포트로 리디렉션되어 다른 컴퓨터에서 일반적으로 하는 것처럼 SSH를 사용할 수 있습니다.
$ ssh -p 2222 localhost
답변3
OpenSSH 구성은 Buildroot 2016.05, QEMU 2.5.0, Ubuntu 16.04 호스트에서 테스트되었습니다.
QEMU 네트워크 전달 외에도 SSH를 적절하게 설정해야 합니다. 이에 대해서는 여기서 다루겠습니다.
먼저 qemu_x86_64_defconfig
openssh 패키지를 활성화합니다.
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
그런 다음 최종 시스템에서 해당 로그 파일을 사용하거나 자동으로 생성해야 합니다 BR2_ROOTFS_POST_BUILD_SCRIPT
.사용자 정의 빌드 대상 파일 시스템 |
관련된:https://stackoverflow.com/questions/23106012/how-to-access-raspberry-pi-qemu-vm-via-network
답변4
나는 당신이 사용해야한다고 생각 hostfwd=tcp::7777-:8001
합니다hostfwd=tcp::7777:8001