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 强制停止它)。
我怎样才能正确、安全地做到这一点?