Dar*_*ook 23 ssh shell-script ssh-agent
我想放在ssh-add /path/to/special_key脚本的顶部。这工作正常,但它总是提示输入密码。这很奇怪,也有点烦人,因为即使ssh-add -l显示已经添加了密钥,它仍然要求输入密码。
有没有办法告诉它:“添加此密钥并询问密码是否尚未添加,否则什么都不做”?
Lar*_*ach 27
我没有看到任何 ssh-add 选项可以帮助实现您想要的结果,但是考虑到您特别关注一个键,解决这个问题很容易。
首先,为您的 special_key 获取指纹:
ssh-keygen -lf /path/to/special_key | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
假设这个指纹看起来像 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
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您可以将所有这些折叠成一行:
ssh-add -l |grep -q `ssh-keygen -lf /path/to/special_key | awk '{print $2}'` || ssh-add /path/to/special_key
Run Code Online (Sandbox Code Playgroud)
小智 9
您可能有特殊的原因要显式使用ssh-add,但如果您只想“我想在第一次使用密钥时提示输入密码,但之后不再提示”,openssh 有一个更简单的解决方案:
放入AddKeysToAgent yes你的.ssh/config文件中。
没有直接的方法来检查使用 justssh-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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
输出的内容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)
Run Code Online (Sandbox Code Playgroud)
我们使用 `awk '{print $2}' 只选择包含指纹的第二列,即:
8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5504 次 |
| 最近记录: |