如何运行ssh命令直到成功?

如何运行ssh命令直到成功?

有时我会重新启动设备,并需要ssh在设备准备就绪后重新启动。

我想每 5 秒运行一次 ssh 命令,直到命令成功。

我的第一次尝试:

watch -n5 ssh [email protected] && exit 1

我怎样才能做到这一点?

答案1

另一种选择是使用until.

until ssh [email protected]; do
    sleep 5
done

如果您对多个主机重复执行此操作,请将其放入~/.bashrc.

repeat()
{
read -p "Enter the hostname or IP of your server :" servername
until ssh $servername; do
    sleep 5
done
}

答案2

ssh [email protected]
until !!; do sleep 5 ; done

重复!!上一个命令。

答案3

OpenSSH 的ConnectionAttempts设置几乎可以满足您的需求。默认值为 1,但您可以在命令行中ssh_config或在命令行上更改它:

ssh -o 'ConnectionAttempts 10' ...

ConnectTimeout不幸的是,您无法调整固定为 1 秒的尝试间隔,但您可以以相同的方式调整连接尝试超时(以秒为单位)。

答案4

autossh使 ssh 会话保持活动状态。使用正确的参数,您还可以在当前无法连接时启动它,它会尝试直到成功为止。这工作正常,但如果你想要关于连接部分才能与交互式会话很好地配合,您需要将其与screen或等效项结合起来。

我推荐这个:

AUTOSSH_POLL=5 AUTOSSH_GATETIME=0 autossh -M 0 -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@host

但请参阅其手册页了解详细信息。使用上述参数,autossh将尝试每秒启动 ssh AUTOSSH_POLLAUTOSSH_GATETIME=0如果第一次尝试失败则再次尝试(所以绝对是您想要的),-M 0禁用 autossh 的连接检查,所有后续选项都传递给 ssh。-o如果连接断开超过 5 秒,这两个选项会使 ssh 退出。

相关内容