在Unix上验证Java中的SSH凭据

时间:2009-05-07 18:34:05

标签: java unix authentication ssh

我在unix机器上有一个文本文件,其中包含某人可能用来连接它的SSH用户名和密码。

如何使用Java验证用户名和密码是否有效?

我是否尝试使用Runtime.exec()通过SSH连接到同一台计算机?

我可以为用户/ etc / passwd grep。但是,密码是阴影。

我很感激任何建议。

3 个答案:

答案 0 :(得分:1)

也许这个问题可以扩展为“从Java验证UNIX凭据”,因为解释的机制并不真正依赖ssh。

在不使用网络堆栈开销的情况下,我的镜头是更好的Expect-like替代方案(例如ProcessBuilder):

su -u username -c echo

只需检查退出状态即可了解答案。 (加分点:su存在于所有UNIX操作系统上,它甚至可能在PATH上,并且对于其他外部认证系统也是有效的。)

答案 1 :(得分:0)

如果您具有root访问权限,那么您当然可以阅读 / etc / shadow 。我会说这是“正确”的做法。

除此之外,你认为调用ssh的方式应该没问题,但是我会使用 ssh来运行一个命令,比如创建一些随机的临时文件 - 然后,如果如果创建了文件(或执行了命令),则假设用户名/密码正确无误。听起来很吵,但你可能会在紧急情况下让它工作。

哦,当然,frig有副作用,你实际上是以该用户身份登录的。这可能是不可取的......!

答案 2 :(得分:0)

请记住,UNIX身份验证比/ etc / passwd和/ etc / shadow更多。例如,他们可以针对Kerberos,LDAP,NIS或任何其他数量的来源进行身份验证。出于这个原因,我强烈建议您查看Java的PAM包装器。一个快速谷歌出现了http://jpam.sourceforge.net/,但我没有经验。

当然sshd 可能被配置为根本不使用PAM或仅允许某些用户等。如果你想完全遵循sshd的规则然后改变了一些东西,但它听起来像PAM认证更像是你想要的。