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
VMなしで-net
パラメータに問題はありませんが、ホストからゲストに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シリアルチャネルを設定しない場合は問題なく機能します。
私が正しく理解している場合、UNIXドメインソケットを使用してホストから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がこのように起動されたら、次のようにローカルホストからアクセスできます:
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を実行できるようになります。
Buildroot 2016.05、QEMU 2.5.0、Ubuntu 16.04ホストでテストされたOpenSSH構成
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
を使用してそのログファイルの作成を自動化する必要があります。 生成されたターゲットファイルシステムのカスタマイズ| buildroot.org