
1. 问题背景与场景还原上周五深夜赶项目时我发现自己被锁在了服务器门外——Finalshell保存的SSH连接密码突然无法验证。更糟糕的是这个服务器密码是半年前设置的当时没有记录在密码管理器中。作为一款常用的SSH客户端工具Finalshell确实会自动保存连接密码但软件界面并不直接显示明文密码。这种情况在运维工作中其实相当常见当我们需要迁移服务器、重置密钥或交接工作时找回这些被遗忘的密码就成了刚需。2. Finalshell密码存储机制解析2.1 密码加密原理Finalshell采用AES加密算法保护存储的密码所有连接配置信息都保存在用户目录下的配置文件中。以Windows系统为例路径通常是C:\Users\[用户名]\Finalshell\conn\每个连接对应一个.json文件其中password字段就是经过加密的密码字符串。2.2 关键文件定位技巧通过以下方法可以快速定位目标连接按修改时间排序文件最近访问的连接会排在前面用文本编辑器打开.json文件搜索password字段记录形如U2FsdGVkX12Z...的加密字符串注意直接修改这些配置文件可能导致连接信息损坏建议先备份整个conn目录3. Java解密实战步骤3.1 环境准备需要安装JDK 8环境验证Java环境是否就绪java -version javac -version3.2 解密代码实现创建DecryptFinalshellPwd.java文件写入以下代码import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.IvParameterSpec; import org.apache.commons.codec.binary.Base64; public class DecryptFinalshellPwd { private static final String KEY dHA0NXloa2FuZzA; private static final String IV MTAyNA; public static String decrypt(String encrypted) throws Exception { byte[] key Base64.decodeBase64(KEY); byte[] iv Base64.decodeBase64(IV); byte[] encryptedBytes Base64.decodeBase64(encrypted); Cipher cipher Cipher.getInstance(AES/CBC/PKCS5Padding); SecretKeySpec keySpec new SecretKeySpec(key, AES); IvParameterSpec ivSpec new IvParameterSpec(iv); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); byte[] decrypted cipher.doFinal(encryptedBytes); return new String(decrypted); } public static void main(String[] args) throws Exception { if(args.length 1) { System.out.println(Usage: java DecryptFinalshellPwd encrypted_password); return; } System.out.println(Decrypted password: decrypt(args[0])); } }3.3 编译与执行javac -cp commons-codec-1.15.jar DecryptFinalshellPwd.java java -cp .;commons-codec-1.15.jar DecryptFinalshellPwd U2FsdGVkX12Z...4. 常见问题解决方案4.1 依赖包缺失问题若报错找不到commons-codec包需要从Apache官网下载commons-codec的jar包放在同一目录下编译运行或使用Maven管理依赖dependency groupIdcommons-codec/groupId artifactIdcommons-codec/artifactId version1.15/version /dependency4.2 解密结果异常处理当遇到以下情况时输出乱码检查加密字符串是否完整复制避免漏掉开头/结尾字符报错InvalidKeyException确认Java环境是JDK而非JRE报错BadPaddingException可能是加密字符串被修改过5. 安全建议与替代方案5.1 密码管理最佳实践使用专业密码管理器存储重要凭证定期导出Finalshell连接配置备份对敏感服务器启用密钥认证替代密码登录5.2 其他密码找回途径如果Java方案不可行还可以使用Python实现的解密脚本通过Wireshark抓包获取实时密码需重新连接检查服务器日志中的登录记录如有权限我在实际使用中发现Finalshell 4.3.9之后的版本加密方式有所变化如果上述代码不生效可能需要调整KEY和IV参数。建议在测试环境先验证解密效果避免影响生产服务器。