尝试使用 Mac 电脑远程关闭同一局域网上的 Ubuntu 电脑。如果我在 Mac 上打开终端,我可以使用以下方法关闭 Ubuntu:ssh[电子邮件保护],然后输入密码,然后输入 sudo poweroff,再次输入密码。这确实有效。
问题是我需要使用 Mac Applescript 来执行此操作。(这样我就可以创建一个日历事件并让它在备份完成后在一天中的某个时间运行)
注意:我已经成功创建了一个 Applescript,让 Wakeonlan 在一天中的特定时间打开 Ubuntu:
tell application "Terminal"
set currentTab to do script
("ssh [email protected];")
delay 6
--//password
do script ("~/bin/wakeonlan 00:11.22.33.44.55")
end tell
这很有效,发送 wakeonlan 并启动 Ubuntu,但我不知道如何做同样的事情来关闭 Ubuntu 电脑?我几乎什么都试过了?我发现的所有帖子都只显示了如何从 Ubuntu 终端执行此操作,而不是从 Mac 终端中放入的 Mac AppleScript 执行此操作?
答案1
如果您打算尝试通过 Apple 脚本完成所有操作,那么“cats”的评论似乎很到位:您需要一个 Apple 论坛。
但在我看来,你真正的问题是如何避免被要求提供密码。ssh-复制-id正是为此而发明的。如果你愿意尝试一下……
在目标 Ubuntu 主机上:
为此目的创建专用用户
sudo adduser --force-badname SandMan
接下来,编辑 /etc/sudoers 以允许 SandMan 不受阻碍地执行“sudo /sbin/shutdown ...”。
sudo visudo
(这将默认打开“nano”作为编辑器 - 您必须自己摸索;我把我的编辑器全部改成了 vi。)在最后的 includedir 指令之前插入以下内容:
%SandMan ALL=NOPASSWD: /sbin/shutdown
保存文件
您现在应该能够使用 SandMan 用户登录到您的主机并执行操作,sudo /sbin/shutdown --help
而无需输入密码。
为了允许您直接从 MAC 终端窗口执行关机,请尝试(从您的 MAC 终端):
ssh-keygen -t rsa -b 2048 -f ~/.ssh/SandMan_rsa
ssh-copy-id -i ~/.ssh/SandMan_rsa [email protected]
对于 Ubuntu 20.04 来说,这是很好的语法,但我不确定如果不进行调整,它是否可以在 MAC 上运行。但如果它确实有效,那么你应该能够使用以下命令从 MAC 终端关闭目标:
ssh -i ~/.ssh/SandMan_rsa [email protected] /sbin/shutdown -h now
答案2
我终于明白了。以下是有效的方法:
tell application "Terminal"
activate
do script ("ssh [email protected]")
delay 6
do script "password" in front window
delay 7
do script "sudo poweroft” in front window
delay 5
do script "password" in front window
end tell