
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