从 shell 脚本运行 ssh-agent

从 shell 脚本运行 ssh-agent

我正在尝试创建一个 shell 脚本,除其他功能外,它还启动 ssh-agent 并向代理添加私钥。示例:

#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...

问题在于 ssh-agent 显然启动了 $SHELL 的另一个实例(在我的情况下是 bash),并且从脚本的角度来看,它执行了所有内容,而 ssh-add 及其下面的任何内容都不会运行。

我怎样才能从我的 shell 脚本运行 ssh-agent 并使其继续沿着命令列表前进?

答案1

ssh-agent 应该启动一个会话,当它完成时,用户会话就结束了。因此 ssh-agent 之后的任何命令都可能在注销后执行。

您需要的是session-script包含如下会话命令:

#!/bin/bash
ssh-add /path/to/key
bash -i # or other session starter

然后开始ssh-agent session-script

答案2

将以下内容放在脚本的顶部:

eval `ssh-agent`

你的脚本看起来应该像这样:

#!/bin/bash
eval `ssh-agent`
ssh-add /path/to/key
...
...

解释

周围的反引号ssh-agent收集其输出。eval收集该输出,将其连接到单个命令,然后执行该命令。然后您可以使用它ssh-add来提供您的密钥凭证。

答案3

我倾向于在需要代理的脚本中做类似的事情。

#!/bin/bash

# if we can't find an agent, start one, and restart the script.
if [ -z "$SSH_AUTH_SOCK" ] ; then
  exec ssh-agent bash -c "ssh-add ; $0"
  exit
fi

... and so on.

基本上,脚本首先会检查代理是否正在运行。如果没有,则使用 exec 代替脚本启动新进程。启动代理,添加密钥,最后再次调用脚本(参见$0)。

答案4

最好使用钥匙链在这种情况下

Debian / Ubuntu:

apt-get install keychain

RHEL/Fedora/CentOS

yum install keychain

在你的 .bashrc 中添加以下内容:

eval `keychain --eval id_rsa`

相关内容