一、起因
在一次环境变量注入的时候,使用Base64将密码编码传入,但是传入后无法登录,但是登录到容器内,使用明文却能登录
二、排错过程
出现这种问题,首先判断密文是否有误,但是在linux服务器内反复base64,发现结果与传入的一致。
echo Harbor12345| base64
# SGFyYm9yMTIzNDUK
所以,进入网页使用在线编解码,发现与我在服务器得到的数据不一样:
苦思冥想期间,不小心多按了一个回车,发现在网页内得到了一致的结果:
也就是说,实际上,在服务器内得到的编码,是包含一个换行符的,所以错误的定位:
在linux环境下echo命令行的模式,比在线的方式多一个尾部的回车换行。
三、解决
在命令后加上-n,就能去掉换行符
echo -n Harbor12345 |base64
# SGFyYm9yMTIzNDU=
反思,实际上,仔细对比两个加密后的字符串,也可以发现,前面一致,后面有差异,说明在末尾出现了问题,应当提早注意两个字符串在末尾加密后的变化情况,从而定位问题。