批量校验known_hosts文件中所有Base64编码字符串的方法求助
批量校验known_hosts文件中所有Base64编码字符串的方法求助
嘿,这个问题我之前也碰到过!手动校验270行的Base64串确实太麻烦了,给你几个实用的批量校验方法,能快速定位到有问题的字符串:
方法1:精准匹配known_hosts格式的脚本
根据你给出的行格式,每行有3个明确的Base64串位置,我们可以写一个bash脚本逐行提取并校验:
#!/bin/bash # 替换为你的known_hosts路径,默认是~/.ssh/known_hosts KNOWN_HOSTS="$HOME/.ssh/known_hosts" line_num=0 while IFS= read -r line; do ((line_num++)) # 用|分割提取前两个Base64串 IFS='|' read -ra pipe_parts <<< "$line" b64_1=${pipe_parts[2]} b64_2=${pipe_parts[3]} # 提取最后一个字段作为第三个Base64串 b64_3=$(echo "$line" | awk '{print $NF}') # 校验第一个串 echo "Line $line_num - 校验: $b64_1" echo "$b64_1" | base64 --decode > /dev/null 2>&1 if [ $? -ne 0 ]; then echo " ❌ 无效的Base64编码!" else echo " ✅ 校验通过" fi # 校验第二个串 echo "Line $line_num - 校验: $b64_2" echo "$b64_2" | base64 --decode > /dev/null 2>&1 if [ $? -ne 0 ]; then echo " ❌ 无效的Base64编码!" else echo " ✅ 校验通过" fi # 校验第三个串 echo "Line $line_num - 校验: $b64_3" echo "$b64_3" | base64 --decode > /dev/null 2>&1 if [ $? -ne 0 ]; then echo " ❌ 无效的Base64编码!" else echo " ✅ 校验通过" fi done < "$KNOWN_HOSTS"
使用方法:把这段代码保存为check_known_hosts_b64.sh,然后执行chmod +x check_known_hosts_b64.sh && ./check_known_hosts_b64.sh,它会逐个输出每行每个串的校验结果,一眼就能看到哪一行的哪个串出了问题。
方法2:通用Base64串扫描脚本
如果你的known_hosts格式有变化,或者想扫描所有符合Base64规则的字符串,可以用这个更通用的方法:
grep -nE '[A-Za-z0-9+/]+={0,2}' ~/.ssh/known_hosts | while IFS=':' read -r line_num content; do # 提取当前行所有Base64匹配项 echo "$content" | grep -oE '[A-Za-z0-9+/]+={0,2}' | while read -r b64_str; do echo "Line $line_num - 校验: $b64_str" # 如果想看到具体错误信息,去掉后面的2>&1 echo "$b64_str" | base64 --decode > /dev/null 2>&1 if [ $? -ne 0 ]; then echo " ❌ 这里发现无效的Base64编码!" fi done done
这个脚本会先提取所有带行号的Base64串,然后逐个校验,只输出有问题的结果(如果全部正常就没有错误提示),适合快速定位非法字符的位置。
小提示
- 如果想看到base64解码的具体错误信息,把命令里的
2>&1去掉,这样就能看到比如“invalid input”之类的提示,帮助你排查问题。 - 如果你的known_hosts不在默认的
~/.ssh/known_hosts路径,记得替换脚本里的路径。
备注:内容来源于stack exchange,提问作者PiTheNumber
相关产品推荐
相关产品推荐

