我写了一个简单的监控脚本来检查我们运行的一些虚拟机的可用性.我使用主访问帐户进行了所有测试和调试.在此过程中,我生成了一个SSH密钥对,启动了ssh-agent,并将该标识添加到代理,以允许脚本ssh而无需密码.
现在,我想将此脚本作为服务帐户用户运行.我创建了服务帐户,并生成密钥暂时将登录shell设置为/ bin / bash.我生成了密钥,删除了密码,并将身份添加到代理.
差异似乎与shell如何连接到代理程序有关.在我的用户帐户中,自从我开始测试(大约两周)以来,我没有必要重新启动代理.但是,当我尝试在服务帐户下运行脚本时,我似乎每次都必须重新启动代理,添加标识,然后执行工作.
理想情况下,我希望代理无限期地运行,并且只要脚本运行,服务帐户就会自动重新连接到它,因此我不需要管理脚本中的进程.我查看了每个帐户的配置,但找不到任何差异.任何见解将不胜感激.
**编辑:我忘了指出代理程序确实连续运行,但服务帐户的shell进程似乎没有使用它,而新的代理程序必须启动:
ovmmon 14043 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent ovmmon 14952 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
解决方法
>当您注销时,ssh-agent实际上正在关闭
> ssh-agent仍在运行,但您丢失了有关其PID和管道的信息
您可以通过执行ps -ef检查是哪种情况并检查ssh-agent.
如果ssh-agent已经死了,你需要一种方法让它保持活力.这有三种方法:
>您可以在引导服务器时从启动脚本启动ssh-agent,并将输出回显到文件(具有适当的访问权限以防止其被滥用).如果您使密钥无密码,您也可以从脚本中添加密钥. (显然,当您连接的帐户对远程服务器的权限非常有限时,最后一部分是可取的).然后让您的脚本从启动时创建的文件中读取SSH代理信息.
>登录服务帐户时使用屏幕;然后在启动代理后断开与屏幕会话的连接.
>启动代理时使用nohup.
如果ssh-agent没有死,但是你丢失了环境信息,请确保在启动它时让它将其环境变量写入特定文件.然后,在登录时,让您的shell源文件.