Phi*_*ide 42 scripting ssh watch
有时我会重新启动设备,并需要ssh
在设备准备就绪后重新启动。
我想每 5 秒运行一次 ssh 命令,直到命令成功。
我的第一次尝试:
watch -n5 ssh me@device.local && exit 1
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Hun*_*son 42
另一种选择是使用until
.
until ssh me@device.local; do
sleep 5
done
Run Code Online (Sandbox Code Playgroud)
如果您对多个主机重复执行此操作,请将其放在~/.bashrc
.
repeat()
{
read -p "Enter the hostname or IP of your server :" servername
until ssh $servername; do
sleep 5
done
}
Run Code Online (Sandbox Code Playgroud)
GAD*_*D3R 27
ssh me@device.local
until !!; do sleep 5 ; done
Run Code Online (Sandbox Code Playgroud)
在!!
重复最后命令。
Dav*_*ter 23
OpenSSH 的ConnectionAttempts
设置几乎可以满足您的需求。默认值为 1,但您可以ssh_config
在命令行中或在命令行上更改它:
ssh -o 'ConnectionAttempts 10' ...
Run Code Online (Sandbox Code Playgroud)
不幸的是,您无法调整固定为 1 秒的尝试间隔,但您可以ConnectTimeout
以相同的方式调整连接尝试超时(以秒为单位)。
Dop*_*oti 15
while ! ssh user@host.example.com true; do
sleep 5
done; echo "Host is back up at $(date)!"
Run Code Online (Sandbox Code Playgroud)
autossh
使 ssh 会话保持活动状态。使用正确的参数,您还可以在当前无法连接时启动它,它会尝试直到成功为止。这工作正常,但如果您希望重新连接部分能够与交互式会话很好地配合,您需要将其与screen
或等效项结合起来。
我推荐这个:
AUTOSSH_POLL=5 AUTOSSH_GATETIME=0 autossh -M 0 -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@host
Run Code Online (Sandbox Code Playgroud)
但请参阅其手册页了解详细信息。使用上述参数,autossh
将尝试每秒启动 ssh AUTOSSH_POLL
,AUTOSSH_GATETIME=0
如果第一次尝试失败则再次尝试(所以绝对是您想要的),-M 0
禁用 autossh 的连接检查,所有后续选项都传递给 ssh。-o
如果连接断开超过 5 秒,这两个选项会使 ssh 退出。
归档时间: |
|
查看次数: |
16058 次 |
最近记录: |