小智 36
sed 提供了一个紧凑的解决方案:
sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)
这会将原始文件保存authorized_keys在authorized_keys.bak. 如果您不想要备份,则只需更改-i.bak为-i.
您甚至可以删除多个键:
sed -i.bak '/REGEX1/d; /REGEX2/d' ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)
这里唯一棘手的一点是正则表达式中的特殊字符需要转义。
小智 11
正如 Ignition 建议的那样,这可以通过grep -v.
这是一个示例,该示例在没有其他密钥时some unique string删除包含或仅删除authorized_keys文件的密钥。
if test -f $HOME/.ssh/authorized_keys; then
if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then
cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
else
rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
fi;
fi
Run Code Online (Sandbox Code Playgroud)
替换some unique string为仅存在于您要删除的密钥中的内容。
作为 ssh 上的 oneliner,这变成了
ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; else rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; fi; fi'
Run Code Online (Sandbox Code Playgroud)
在 Linux (SLES) 和 HP-UX 上测试。
不。您需要通过 SSH 进入并使用sed或grep从文件中删除密钥。
| 归档时间: |
|
| 查看次数: |
60795 次 |
| 最近记录: |