Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 捕获UNIX脚本中的SSH异常_Shell_Unix_Ssh_Openssh - Fatal编程技术网

Shell 捕获UNIX脚本中的SSH异常

Shell 捕获UNIX脚本中的SSH异常,shell,unix,ssh,openssh,Shell,Unix,Ssh,Openssh,我的服务器中有一个后台进程,它经常更新我的~/.ssh/authorized_密钥。如果我在同一时刻从我的客户机ssh,它将失败 $ssh我的服务器日期 SSH版本:OpenSSH_5.3p1 user@my_server的密码: ssh将在多次尝试后将脚本标记为失败 每当ssh出现故障时,我想中断并添加一个异常处理块,使其休眠30秒 差不多 *ssh -o 'StrictHostKeyChecking no' appsrvr01.myserv.com "date" 2

我的服务器中有一个后台进程,它经常更新我的~/.ssh/authorized_密钥。如果我在同一时刻从我的客户机ssh,它将失败

$ssh我的服务器日期 SSH版本:OpenSSH_5.3p1 user@my_server的密码:

ssh将在多次尝试后将脚本标记为失败

每当ssh出现故障时,我想中断并添加一个异常处理块,使其休眠30秒

差不多

             *ssh -o 'StrictHostKeyChecking no' appsrvr01.myserv.com "date" 2> /tmp/error
             if [ $? -ne 0 ]
             then
               echo -e "\n Please wait..\n\n"
               sleep 1s
             else
               echo -e "\n The Environment is ready to use!\n\n"
               exit 0
             fi*

有没有更好的方法,因为上面的代码片段仍然会提示输入密码

也许您可以在一个shell脚本中通过在锁文件上“flock”来实现这一点,然后在上面运行的shell脚本中“flock”来实现:

在更新授权密钥的脚本中:

   (flock 200
   # commands here that modify your authorized_keys file
   ) 200>/tmp/authkey_lock
围绕您在上面发布的脚本:

   (flock 200
   ssh -o 'StrictHostKeyChecking no' appsrvr01.myserv.com "date" 2> /tmp/error
   if [ $? -ne 0 ]
   then
     echo -e "\n Please wait..\n\n"
     sleep 1s
   else
     echo -e "\n The Environment is ready to use!\n\n"
     exit 0
   fi
   ) 200>/tmp/authkey_lock

有关flock的信息,请参阅“man flock”。

为什么在此更新过程中登录失败?您不是自动替换文件吗?谢谢,但我无法控制将密钥更新为组级厨师脚本的脚本。我更关注的是如何优雅地退出ssh会议