Java调用Runtime.getRuntime().exec()执行ssh-keygen报权限拒绝错误
解决ssh-keygen执行时的权限拒绝问题
可能的原因及对应解法
1. 排查SELinux上下文限制
多数RHEL/CentOS系系统默认开启SELinux,即便目录权限配置正确,也可能因SELinux上下文规则阻止写入操作:
- 临时关闭SELinux测试:
sudo setenforce 0,重新运行代码验证是否恢复正常 - 若临时关闭后问题解决,给目录设置正确的SELinux上下文:
或者添加永久规则:chcon -t ssh_home_t /home/foo/stir_shaken/sks/semanage fcontext -a -t ssh_home_t "/home/foo/stir_shaken/sks(/.*)?" restorecon -Rv /home/foo/stir_shaken/sks/
2. 修正命令中的引号转义问题
代码中bash -c后的命令里,-N ""的双引号会被bash解析时忽略,导致ssh-keygen尝试读取密码输入,进而触发异常。调整转义方式:
修改为单引号传递空密码:
exec(new String[] {"bash", "-c", "ssh-keygen -b 2048 -t rsa -N '' -f /home/foo/stir_shaken/sks/pvtk_20221014215557_ES256.pem"});
或者使用转义双引号:
exec(new String[] {"bash", "-c", "ssh-keygen -b 2048 -t rsa -N \\\"\\\" -f /home/foo/stir_shaken/sks/pvtk_20221014215557_ES256.pem"});
3. 检查父目录权限
虽然sks目录权限正确,但父目录/home/foo/stir_shaken需要至少**执行权限(x)**才能让用户进入目录。检查权限:
ls -ld /home/foo/stir_shaken
若权限不足,执行:
chmod u+x /home/foo/stir_shaken
4. 确认目标文件是否已存在
如果目标文件pvtk_20221014215557_ES256.pem已存在,且不属于foo用户或权限为只读,也会导致写入失败。先删除已存在的文件再尝试:
rm -f /home/foo/stir_shaken/sks/pvtk_20221014215557_ES256.pem
5. 改用ProcessBuilder替代Runtime.exec
Runtime.exec处理命令参数时易出现解析问题,ProcessBuilder更可靠,还能直接设置工作目录,推荐替换代码:
try { // 检查当前用户 ProcessBuilder whoamiPb = new ProcessBuilder("whoami"); Process whoamiProc = whoamiPb.start(); String user = new String(whoamiProc.getInputStream().readAllBytes()).trim(); FileLogger.logNoticeMsg(className, methodName, "Executing command as user = " + user); whoamiProc.waitFor(); // 执行ssh-keygen ProcessBuilder keygenPb = new ProcessBuilder( "ssh-keygen", "-b", "2048", "-t", "rsa", "-N", "", "-f", "/home/foo/stir_shaken/sks/pvtk_20221014215557_ES256.pem" ); Process keygenProc = keygenPb.start(); // 读取错误输出 String errorOutput = new String(keygenProc.getErrorStream().readAllBytes()); if (!errorOutput.isEmpty()) { FileLogger.logError(className, methodName, errorOutput); } keygenProc.waitFor(); } catch (Exception e) { e.printStackTrace(); }
该方式无需通过bash中转,直接调用ssh-keygen,避免了引号解析问题,稳定性更强。
内容的提问来源于stack exchange,提问作者Samuel Rangel
相关产品推荐
相关产品推荐

