
次のコマンドを使用して、Virtual Box から Ubuntu インスタンスをバックグラウンドで実行します。
VBoxManage startvm ${VM_NAME} --type headless
GUI 経由で実行する場合との主な違いは、起動後に GUI に入るとifconfig
IP アドレスを確認してssh
ホスト上の端末からアクセスでき、バックグラウンドでは当然できないことです。
ネットワーク上で IP アドレスが動的に割り当てられていると仮定した場合、ssh の目的で新しく作成されたインスタンスに割り当てられた IP を抽出する方法はありますか。または、IP を知らなくても (たとえば、ホストのバックドア ポート経由で) ssh で接続する方法はありますか。
答え1
VBoxManageコマンドを使用してIPアドレスを抽出できます。このフォーラム投稿virtualbox.org で:
VBoxManage guestproperty enumerate <vmname>
ただし、特別な理由がない限り、ゲスト VM に静的 IP アドレスを割り当てることを強く検討してください。これは、DHCP を使用している場合でも可能です。DHCP サーバーが割り当てる範囲外の IP アドレスを選択するだけです。
答え2
まず最初にインストールしたことを確認してくださいVirtualBox 拡張パックそうでない場合はインストールしてください。
例えば(Ubuntuの場合)
> wget http://download.virtualbox.org/virtualbox/4.2.12/Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
> sudo VBoxManage extpack install ./Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
または
https://www.virtualbox.org/wiki/ダウンロード
その後、VMのIPを取得できます
VBoxManage guestproperty enumerate <_name_of_VM_> | grep IP | grep -o -w -P -e '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
答え3
Guest Additionをインストールしなくても実行できます
しかし、ネットワークについて知っておく必要があります。
例えば、2つのアダプタを持つVMがあります。
1つはインターネット通信用、
もう1つはホストのみの通信用
コマンドでネットワークを見ることができますVBoxManage リスト
NAT ネットワーク:
% VBoxManage は NATNET をリストします ネットワーク名: NatNetwork IP: 10.10.12.1 ネットワーク: 10.10.12.0/24 DHCP 有効: はい 有効: はい
ホストのみのネットワーク
% VBoxManage リスト hostonlyifs 名前: vboxnet0 DHCP: 無効 IPアドレス: 192.168.6.1 ネットワークマスク: 255.255.255.240
ここでは実行中のVMを表示するメイン部分です
% vboxmanage 実行中のvmsをリストします 「centos7 node0 IP テスト」 {46ec9075-f49b-4d16-9867-d56710b6a3da}
VM uuid が必要です
。46ec9075-f49b-4d16-9867-d56710b6a3da です。
MACアドレスを取得できるようになりました
% vboxmanage showvminfo --details 46ec9075-f49b-4d16-9867-d56710b6a3da | fgrep MAC NIC 1: MAC: 08002783E8BB、アタッチメント: NAT ネットワーク 'NatNetwork'、ケーブル接続: オン、トレース: オフ (ファイル: なし)、タイプ: 82540EM、報告された速度: 0 Mbps、ブート優先度: 0、Promisc ポリシー: 拒否、帯域幅グループ: なし NIC 2: MAC: 080027D992F0、アタッチメント: ホストオンリー インターフェイス 'vboxnet0'、ケーブル接続: オン、トレース: オフ (ファイル: なし)、タイプ: 82540EM、報告された速度: 0 Mbps、ブート優先度: 0、Promisc ポリシー: 拒否、帯域幅グループ: なし
'NatNetwork' の最初のアダプタの 08002783E8BB通信網
'vboxnet0' の 2 番目のアダプタ用の 080027D992F0インターフェース
これで最初のアダプタのDHCPテーブルからIPを取得できるようになりました
% vboxmanage dhcpserver findlease --network NatNetwork --mac-address=08002783E8BB IPアドレス: 10.10.12.4 MAC アドレス: 08:00:27:83:e8:bb 状態: 確認済み 発行日: 2020-07-13T13:31:20Z (1594647080) 有効期限: 2020-07-13T13:41:20Z (1594647680) TTL: 600 秒、現在残り 586 秒
そして2番目
% vboxmanage dhcpserver findlease --interface vboxnet0 --mac-address=080027D992F0 IPアドレス: 192.168.6.3 MAC アドレス: 08:00:27:d9:92:f0 状態: 確認済み 発行日: 2020-07-13T13:29:06Z (1594646946) 有効期限: 2020-07-13T13:39:06Z (1594647546) TTL: 600 秒、現在残り 399 秒
natネットワークの場合はオプション--networkを使用し、
ホストのみのアダプタの場合はオプション--interfaceを使用することに注意してください。
ホストからSSHでこのVMに接続します
% ssh[メールアドレス] [メールアドレス]のパスワード: 最終ログイン: 2020年7月13日月曜日 09:05:33 [ルート@node0 ~]#
答え4
これは私が手動でも Ansible でも実行する方法と同じです。「/Net/0/」は最初のネットワーク インターフェイス、「/Net/1/」は 2 番目のネットワーク インターフェイスなどです。「/V4/」は IPv4 用、「/V6/」は IPv6 用です。
IPv4バージョン
VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP" | sed -e 's/Value: //g'
IPV6バージョン
VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V6/IP" | sed -e 's/Value: //g'
簡単なスクリプトにすると:
#!/bin/sh
for VM in $(VBoxManage list runningvms | awk -F\{ '{print $2}' | sed -e 's/}//g');
do {
VMNAME="$(VBoxManage showvminfo ${VM} --machinereadable | awk -F\= '/^name/{print $2}')"
VMIP=$(VBoxManage guestproperty get ${VM} "/VirtualBox/GuestInfo/Net/0/V4/IP" | sed -e 's/Value: //g')
printf "VM-IP: %-16s VM-Name: %-50s\n" "${VMIP}" "${VMNAME}"
} done
これにより、実行中のすべての VM について次のような出力が提供されます。
VM-IP: 10.13.172.82 VM-Name: "Ansible Lab VM1 Master"
VM-IP: 10.13.172.84 VM-Name: "Ansible Lab VM2 Slave CentOS"
VM-IP: 10.13.172.83 VM-Name: "Ansible Lab VM3 Slave Win10"
...etc
注意: Guest Additions をインストールする必要があります。