有时我会重新启动设备,并需要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_POLL
,AUTOSSH_GATETIME=0
如果第一次尝试失败则再次尝试(所以绝对是您想要的),-M 0
禁用 autossh 的连接检查,所有后续选项都传递给 ssh。-o
如果连接断开超过 5 秒,这两个选项会使 ssh 退出。