我想放在ssh-add /path/to/special_key
脚本的顶部。这工作正常,但它总是提示输入密码。这很奇怪,而且有点烦人,因为即使ssh-add -l
显示密钥已经添加,它仍然要求输入密码。
有没有办法告诉它:“添加此密钥并询问密码(如果尚未添加),否则什么都不做”?
答案1
我没有看到任何 ssh-add 选项可以帮助实现您想要的结果,但是考虑到您特别关心一个密钥,解决这个问题非常容易。
首先,获取您的special_key的指纹:
ssh-keygen -lf /path/to/special_key | awk '{print $2}'
假设这个指纹看起来像 6d:98:ed:8c:07:07:fe:57:bb:19:12:89:5a:c4:bf:25
然后,在脚本的顶部,用来ssh-add -l
检查该键是否已加载,然后提示添加它:
ssh-add -l |grep -q 6d:98:ed:8c:07:07:fe:57:bb:19:12:89:5a:c4:bf:25 || ssh-add /path/to/special_key
如果您愿意,您可以将所有这些折叠成一行:
ssh-add -l |grep -q `ssh-keygen -lf /path/to/special_key | awk '{print $2}'` || ssh-add /path/to/special_key
答案2
您可能有特殊的原因要ssh-add
显式使用,但如果您只想“我想在第一次使用密钥时提示输入密码,但之后不再提示”,openssh 有一个更简单的解决方案:
放入你的文件AddKeysToAgent yes
中。.ssh/config
答案3
没有直接的方法来检查,ssh-add
但您可以使用ssh-keygen
一些脚本来检查。
$ if ssh-add -l | \
grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
then echo yes; \
else echo no; \
fi
yes
如果文件所表示的指纹/path/to/special_key
出现在ssh-add -l
的输出中,则将打印上面的内容。
例子
$ if ssh-add -l | \
grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
then echo yes; \
else echo no; \
fi
yes
输出的内容ssh-keygen -lf /path/to/special_key
如下所示:
$ ssh-keygen -lf /path/to/special_key
2048 8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c dev-servers (RSA)
我们使用“awk '{print $2}”仅选择包含指纹的第二列,即:
8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c
参考
答案4
ssh-add --apple-use-keychain FILE
在 Mac 上对我来说工作得很好。
它仍然显示“已添加身份:”行,但不要求输入密码。
从手册页:
--apple-use-keychain
添加身份时,每个密码也将存储在用户的钥匙串中。当使用 删除身份时-d
,每个密码都将从其中删除。