首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查ssh-agent是否已经在bash中运行?

如何检查ssh-agent是否已经在bash中运行?
EN

Stack Overflow用户
提问于 2016-11-11 21:45:49
回答 9查看 73.2K关注 0票数 59

我在我的Linux环境中有一个示例sh脚本,它基本上运行当前shell的ssh-agent,添加一个密钥并运行两个git命令:

代码语言:javascript
复制
#!/bin/bash
eval "$(ssh-agent -s)"
ssh-add /home/duvdevan/.ssh/id_rsa

git -C /var/www/duvdevan/ reset --hard origin/master
git -C /var/www/duvdevan/ pull origin master

脚本实际上工作得很好,但每次我运行它时,我都会得到一个新的进程,所以我认为它可能会成为一个性能问题,我可能最终会有一些无用的进程。

输出示例:

代码语言:javascript
复制
Agent pid 12109
Identity added: /home/duvdevan/.ssh/custom_rsa (rsa w/o comment)

此外,还可以找到一个现有的ssh-agent进程并将我的密钥添加到其中吗?

EN

回答 9

Stack Overflow用户

发布于 2016-11-11 22:16:53

如果您想在脚本退出后立即终止它,只需在eval行后面添加以下内容:

代码语言:javascript
复制
trap "kill $SSH_AGENT_PID" exit

或者:

代码语言:javascript
复制
trap "ssh-agent -k" exit

ssh-agent -s的求值中设置$SSH_AGENT_PID

您应该能够通过扫描整个ssh-agent找到正在运行的/tmp/ssh-*,并从中重新构造SSH_AGENT变量(SSH_AUTH_SOCKSSH_AGENT_PID)。

票数 11
EN

Stack Overflow用户

发布于 2018-04-21 11:40:31

ps -p $SSH_AGENT_PID > /dev/null || eval "$(ssh-agent -s)"

单行命令。第一次运行将启动ssh-agent。第二次运行不会启动ssh-agent。简单而优雅的伴侣!

票数 5
EN

Stack Overflow用户

发布于 2019-08-05 11:38:50

使用$SSH_AGENT_PID只能测试ssh-agent,但在尚未添加时会遗漏身份

代码语言:javascript
复制
$ eval `ssh-agent`
Agent pid 9906
$ echo $SSH_AGENT_PID
9906
$ ssh-add -l
The agent has no identities.

因此,使用如下示例中的expect scriptssh-add -l检查它将会被保存:

代码语言:javascript
复制
$ eval `ssh-agent -k`
Agent pid 9906 killed
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-add -l &>/dev/null
$ [[ "$?" == 2 ]] && eval `ssh-agent`
Agent pid 9547
$ ssh-add -l &>/dev/null
$ [[ "$?" == 1 ]] && expect $HOME/.ssh/agent
spawn ssh-add /home/user/.ssh/id_rsa
Enter passphrase for /home/user/.ssh/id_rsa: 
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
$ ssh-add -l
4096 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /home/user/.ssh/id_rsa (RSA)

因此,当ssh-agentssh-add -l都在bash脚本上运行时:

代码语言:javascript
复制
#!/bin/bash
ssh-add -l &>/dev/null
[[ "$?" == 2 ]] && eval `ssh-agent`
ssh-add -l &>/dev/null
[[ "$?" == 1 ]] && expect $HOME/.ssh/agent

然后,它将始终检查并确保连接正在运行:

代码语言:javascript
复制
$ ssh-add -l
4096 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /home/user/.ssh/id_rsa (RSA)

您还可以使用do while模拟上述脚本中的重复命令

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

https://stackoverflow.com/questions/40549332

复制
相关文章

相似问题

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