태그 보관물: qemu

qemu

QEMU를 사용하여 호스트에서 게스트로 SSH하는 방법은 무엇입니까? 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를 사용하여 호스트에서 게스트로 ssh를 어떻게 설정합니까? 다음과 같이 특별한 매개 변수없이 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이 부팅되지 않습니다.



답변

오류는 -net 문이 아니라 다음과 같습니다.

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

이 명령문은 이미 포트 7777을 사용합니다. 포트 전달의 경우

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

virtio 직렬 채널을 설정하지 않으면 정상적으로 작동합니다.

올바르게 이해한다면 유닉스 도메인 소켓을 사용하여 호스트에서 VM으로 통신하도록 virtio 직렬 채널을 설정하고 싶습니까?

이 경우 다음이 작업을 수행 할 수 있습니다.

/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

편집하다:

ssh를 사용하여 호스트에서 VM에 연결하는 방법의 예 :

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

이 호스트 전달은 로컬 호스트 (호스트) 포트 10022를 VM의 포트 22에 매핑합니다. VM이 이와 같이 시작되면 다음과 같이 로컬 호스트에서 VM에 액세스 할 수 있습니다.

ssh vmuser@localhost -p10022

-net nic 명령은 매우 기본적인 가상 네트워크 인터페이스 카드를 초기화합니다.


답변

시작할 때 이것을 사용해보십시오 qemu -redir tcp:2222::22

$ ssh -p 2222 localhost

qemu launch 명령의 tcp : 2222 :: 22 플래그는 호스트 시스템의 2222 포트를 가상 시스템의 포트 22 (기본 ssh 포트)에 맵핑합니다.

그런 다음 로컬 호스트 (호스트 시스템)의 2222 포트로 간단히 ssh하면 트래픽이 가상 시스템의 ssh 22 포트로 리디렉션되므로 일반적으로 다른 시스템과 마찬가지로 ssh를 사용할 수 있습니다.


답변

OpenSSH 구성은 Buildroot 2016.05, QEMU 2.5.0, Ubuntu 16.04 호스트에서 테스트되었습니다.

QEMU 네트워크 전달 외에도 SSH를 올바르게 설정해야합니다. 여기에서 다룰 것입니다.

qemu_x86_64_defconfigopenssh 패키지로 시작 하고 활성화하십시오.

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: 생성 된 대상 파일 시스템을 사용자 정의 | buildroot.org