这似乎是我有两个帐户我configuration的ssh代理行为之间的差异。
我写了一个简单的监控脚本来检查我们运行的一些虚拟机的可用性。 我用我的主要访问帐户做了所有的testing和debugging。 在此过程中,我生成了一个SSH密钥对,启动了ssh-agent,并将该身份添加到代理以允许脚本无需密码即可ssh。
现在,我想运行这个脚本作为服务帐户用户。 我创build了服务帐户,并生成密钥临时将loginshell设置为/ bin / bash。 我生成了我的密钥,删除了密码,并将身份添加到代理。
这种差异似乎与shell连接到代理的方式有关。 在我的用户帐户中,自从我开始testing(大约两周)以来,我不必重新启动代理。 但是,当我尝试运行服务帐户下的脚本时,我似乎不得不重新启动代理,每次添加标识,然后执行该工作。
理想情况下,我希望代理无限期地运行,并在脚本运行时自动重新连接服务帐户,这样我就不需要在脚本中pipe理进程。 我查看了每个帐户的configuration,找不到任何区别。 任何有识之士将不胜感激。
**编辑:我忘了指出,代理不断运行,但服务帐户的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
这里有两件事情之一:
您可以通过执行ps -ef来检查是哪一种情况,并检查ssh-agent。
如果ssh代理已经死了,你需要一种方法来保持它的活着。 以下是三种方法:
如果ssh-agent没有死掉,但是你已经丢失了环境信息,那么确保当你启动它时,你需要把它的环境variables写到一个特定的文件中。 然后,login时,让你的shell源文件。
如果使用子shell调用方法,ssh-agent将在注销shell时死亡。 如果使用eval方法,shell将保持运行直到手动终止。
请参阅: http : //docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm
具体来说: http : //docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm#ch06-50031.html
另外,我知道从cron ENVvariables运行可能会导致问题。 所以这是另一个需要检查的地方。