我想放在ssh-add /path/to/special_key
脚本的顶部。这可以正常工作,但始终提示您输入密码。这很奇怪,有点令人讨厌,因为即使ssh-add -l
显示密钥已经被添加,它仍然要求输入密码。
有没有办法告诉它:“添加此密钥并询问密码是否还没有添加,否则什么也不做”?
我想放在ssh-add /path/to/special_key
脚本的顶部。这可以正常工作,但始终提示您输入密码。这很奇怪,有点令人讨厌,因为即使ssh-add -l
显示密钥已经被添加,它仍然要求输入密码。
有没有办法告诉它:“添加此密钥并询问密码是否还没有添加,否则什么也不做”?
Answers:
我看不到任何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
ssh-keygen
(毕竟,我不想生成任何密钥),而是使用密钥路径:ssh-add -l | grep -q 'path/to/key' || ssh-add /path/to/key
ssh-keygen
在答案中不会生成密钥-与ssh-add -l
您的示例相同,实际上不会添加任何内容。标志会修改命令的行为,因此它与名称不完全匹配。请注意,这些版本在功能上有所不同-如果按路径检查并且该路径上的键发生更改,则您的版本将不会使用它。答案中的版本也将检测现有密钥,无论它从何处加载。
没有直接检查方法,只能使用,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