首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ssh-agent行为的差异

ssh-agent行为的差异
EN

Server Fault用户
提问于 2013-05-20 13:32:47
回答 2查看 308关注 0票数 3

似乎我在我配置的两个帐户的ssh代理的行为之间有点不一致。

我编写了一个简单的监视脚本来检查我们正在运行的某些VM的可用性。我用我的主访问帐户做了所有的测试和调试。在此过程中,我生成了一个SSH密钥区,启动了ssh代理,并将标识添加到代理中,以允许脚本不需要密码即可获得ssh。

现在,我想以服务帐户用户的身份运行这个脚本。我创建了服务帐户,并生成键,暂时将登录shell设置为/bin/bash。我生成了密钥,删除了密码,并将身份添加到代理中。

这种差异似乎与外壳与代理的连接方式有关。在我的用户帐户中,自从我开始测试(大约两周)以来,我还没有重新启动代理。但是,当我试图在服务帐户下运行脚本时,似乎每次都必须重新启动代理,添加标识,然后执行工作。

理想情况下,我希望代理无限期地运行,并且只要脚本运行,服务帐户就会自动重新连接到它,所以我不需要管理脚本中的进程。我看过每个帐户的配置,找不到任何不同之处。任何洞察力都将不胜感激。

**编辑:我忘记指出代理确实在持续运行,但是服务帐户的shell进程似乎没有在使用它,必须开始一个新的进程:

代码语言:javascript
复制
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
EN

回答 2

Server Fault用户

回答已采纳

发布于 2013-05-20 13:47:40

这里发生的两件事之一是:

  1. 当您注销时ssh-代理实际上正在关闭。
  2. ssh-代理仍然在运行,但是您正在丢失有关它的PID和管道的信息。

您可以通过执行ps -ef和检查ssh代理来检查哪一种情况。

如果ssh特工死了,你需要一个办法让它活下来。以下是三种方法:

  1. 您可以在启动服务器时从startscript启动ssh代理,并将输出回显到文件(具有适当的访问权限以防止其被滥用)。如果您使键没有密码,您也可以从脚本中添加密钥。(显然,只有当您连接的帐户在远程服务器上的权限非常有限时,最后一部分才是明智的)。然后让脚本从启动时创建的文件中读取SSH代理信息。
  2. 登录到服务帐户时使用屏幕,然后在启动代理后与屏幕会话断开连接。
  3. 启动代理时使用nohup。

如果ssh代理没有死,但是您丢失了环境信息,那么请确保启动它时,要将它的环境变量写入特定的文件。然后,在登录时,让您的shell源文件。

票数 5
EN

Server Fault用户

发布于 2013-05-20 13:42:52

如果您使用的是子shell调用方法,ssh代理将在退出shell时死亡。如果使用eval方法,则shell将一直运行到手动终止为止。

请参阅:http://docstore.mik.ua/orelly/networking_2 2ndEd/ssh/ch06_03.htm

具体来说:http://docstore.mik.ua/orelly/networking_2 2ndEd/ssh/ch06_03.htm#ch06-50031.html

另外,我知道当从cron变量运行时会引起问题。因此,这是另一个需要检查的领域。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/509250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档