我的家用电脑是一台运行 OS X 10.8.5 的 Mac,通常可以通过互联网接受 SSH 连接(我已进行端口转发),但现在处于睡眠状态。当我不在家时,它有时会因各种原因被唤醒。我想向它发送一些 SSH 命令,但不能一直尝试直到它被唤醒。
有没有一种简单的非 AppleScript 方法来延迟 SSH 连接、密码验证和命令输入,直到主机计算机响应?我在外地使用 Mac,但我想知道在任何基于 Unix 的操作系统上执行此操作的方法。通常,尝试连接一分钟左右后就会超时。
我知道在大多数终端仿真器中,您可以在阻塞进程运行时键入命令,这些命令将在这些进程完成后执行。例如,在进程仍在运行时git push foo
立即键入;git 将在提交完成后推送。我认为通过终端仿真器使用 ssh 执行此类操作可能有一些技巧。git commit -a -m "foo"
git commit -a -m "foo"
答案1
您可以使用 ping 检查您的机器是否启动,然后发出一个或多个 ssh 命令。请注意,您需要在主机上设置基于证书的身份验证。这是一个基于 GNU/Linux 的 BASH 的小脚本,但我想您可以将其转换为 Mac OS X 正在使用的任何脚本。
#/bin/bash
hostup=0
while [ $hostup -ne 1 ]; do
ping -c 4 <hostname or IP>
if [ $? -eq 0 ]; then
ssh username@hostname <command to execute>
hostup=1;
done
每条 SSH 行只能使用一个命令,如果要使用参数,则必须用引号括住命令。如果您要一直执行相同的命令,那么家用计算机上的脚本可能比较合适。