我想写一个可以关闭远程Ubuntu系统的脚本。实际上,我希望我的虚拟机在关闭安装了虚拟机的主机器时安全关闭。
是否有任何在 Sh 脚本或用任何语言(如 Python)编写的脚本的帮助下执行此操作。
您可以从远程 Linux 计算机(VM 主机)运行以下命令:
ssh root@<vm-client-ip> "shutdown -h now"
您必须输入远程计算机的 root 密码。您可以通过添加 ssh 证书来防止这种情况(如果您正在编写脚本,则很好):
无需密码即可登录 SSH
如果您用它制作脚本,请不要忘记在关机后添加延迟(例如 sleep 10
),以便 VM 有时间平静地死去。
一个完整的 bash 脚本(未经测试):
#!/bin/bash
ssh root@<vm-client-ip> "shutdown -h now"
sleep 10
您可以使用虚拟机管理程序,即 qemu/KVM 情况下的 qm 脚本
qm shutdown 300 && qm wait 300
它会关闭 ID 为 300 的 VM,并等待 VM 停止。有关更多选项,请参阅 QM 手册。
有很多方法可以关闭Linux系统。 首选方法是调用窗口管理器的关闭序列。 如果你正在使用gdm
(如果你正在使用 Ubuntu,你可能正在使用):
gnome-session-quit --power-off
如果您使用的是kdm
则命令为:
kdmctl shutdown
关闭计算机的其他方法(可能大部分或完全等效,也可能不完全等效,但都需要超级用户权限)包括:
/sbin/init 0
/sbin/halt
/sbin/shutdown -h now
/sbin/poweroff
等等等等。
关闭系统的实际命令是关闭,特别是
$ shutdown -h now
现在关闭它。这需要在要停止的计算机上以超级用户权限运行。
脚本调用poweroff
,只要它以超级用户权限运行即可。
根据您使用的虚拟化产品(例如KVM,VirtualBox,VMWare等),您应该可以使用合适的界面。
我建议您在Google上搜索您选择的虚拟化软件的名称+" API"。上面所有的例子都有相关的结果,可以从例如 Python 调用。
对于VirtualBox,请查看此链接:https://blogs.oracle.com/nike/entry/python_api_to_the_virtualbox
这应该给你一个SOAP接口,它应该允许你通过例如cURL进行远程控制。
或者,对于远程方面,您可以在服务器上设置私钥身份验证并将密钥的密码保存在本地(例如Seahorse),这将允许您保护ssh访问,而无需每次都输入密码。