bashrc 函数将特定的 ssh 密钥添加到当前终端

bashrc 函数将特定的 ssh 密钥添加到当前终端

git为了不必为我用来从我登录的远程计算机获取/拉取/推送代码的每个命令输入密码,我添加了这个别名在我的.bashrc文件中:

alias='eval $(ssh-agent) && ssh-add'

这在文件夹中只有一个 ssh 密钥的机器上工作得很好,或者如果要使用的 ssh 密钥是根据文档所述~/.ssh考虑的默认密钥命名的:ssh-add

ssh-add 将私钥身份添加到身份验证代理 ssh-agent(1)。
当不带参数运行时,它会添加文件 ~/.ssh/id_rsa、~/.ssh/id_dsa、~/.ssh/id_ecdsa 和 ~/.ssh/id_ed25519。

http://manpages.ubuntu.com/manpages/bionic/man1/ssh-add.1.html

但现在,我在一台有多个 ssh 密钥的机器上(这可能有点矫枉过正,但就是这样):

$ cd ~/.ssh && ls -l 
-rw------- 1 user user 6059 jun  9 10:18 config
-rw------- 1 user user 9546 jul  1 17:58 known_hosts
-rw------- 1 user user 1417 aug 20 20:20 authorized_keys
-rw------- 1 user user 1424 jan 14 09:55 id_ed25519
-rw------- 1 user user 1424 jan 14 09:55 id_ed25519.pub
-rw------- 1 user user 1401 feb 16 13:26 id_ed25519-github
-rw------- 1 user user 1401 feb 16 13:26 id_ed25519-github.pub
-rw------- 1 user user  808 apr  2 12:22 id_ed25519-gitlab
-rw------- 1 user user  808 apr  2 12:22 id_ed25519-gitlab.pub

因此,我希望能够将密钥的名称作为参数传递给我的ssh-eval别名。

我虽然构建一个函数是可行的方法,但它并没有按预期工作,因为ssh-agent当我启动它时(在启动之后),它实际上启动了无限数量的进程(我必须按 Ctrl+C 命令来实际停止它启动这些进程)source ~/.bashrc):

ssh-eval() {
    eval $(ssh-agent) && ssh-add "$1"
}

export -f ssh-eval

然后我将其称为:

ssh-eval ~/.ssh/id_ed25519-github

或者

ssh-eval

两者都无限地产生 ssh-agent 进程(我必须使用 Ctrl+C 强制停止它)。

我怎样才能正确、安全地做到这一点?

相关内容