以下是脚本:
(
vmnames="$(/usr/bin/VBoxManage list vms | grep -o -w -P -e '\"([a-zA-Z0-9_]+)\"' | sed s/\"//g)"
for vm in $vmnames
do
ip="$(/usr/bin/VBoxManage guestproperty enumerate ${vm} | grep 'V4/IP' | grep -o -w -P -e '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | sed s/\"//g)"
echo "${vm} ${ip}"
done
)
stringstream ssCmd;
ssCmd << "sshpass -p '" << sPass << "' ssh -o StrictHostKeyChecking=no "
<< sUser << "@" << sHost << " "
<< "\""
<< my_script_should_go_here
<< "\"";
是否有一个自动工具可以用来正确地转义脚本,或者有人可以建议如何正确地转义脚本?
注意——奇怪的是,该脚本要求在每个虚拟机上安装来宾添加,以便返回每个虚拟机的IP地址信息。
使现代化
static const std::string k_sGetHostIpScript = "KAp2bW5hbWVzPSIkKC91c3IvYmluL1ZCb3hNYW5hZ2UgbGlzdCB2bXMgfCBncmVwIC1vIC13IC1QIC1lICdcIihbYS16QS1aMC05X10rKVwiJyB8IHNlZCBzL1wiLy9nKSIKZm9yIHZtIGluICR2bW5hbWVzCmRvCmlwPSIkKC91c3IvYmluL1ZCb3hNYW5hZ2UgZ3Vlc3Rwcm9wZXJ0eSBlbnVtZXJhdGUgJHt2bX0gfCBncmVwICdWNC9JUCcgfCBncmVwIC1vIC13IC1QIC1lICdcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9JyB8IHNlZCBzL1wiLy9nKSIKZWNobyAiJHt2bX0gJHtpcH0iCmRvbmUKKQ==";
stringstream ssCmd;
ssCmd << "sshpass -p '" << sPass << "' ssh -o StrictHostKeyChecking=no "
<< sUser << "@" << sHost << " "
<< "\"eval 'echo " << k_sGetHostIpScript << " | base64 --decode | bash'\"";