Android到SSH服务器连接密码

时间:2011-12-03 14:40:31

标签: android ssh password-protection jsch

我有一个Android应用程序,供大约10人使用,即它不会被发布并且是“内部”。该应用程序使用jsch将用户连接到SSH服务器。我在决定用户登录方式时遇到了问题。即使应用程序在登录服务器时严重限制了用户的功能(基本上只允许上传某些文件),他们仍然必须使用用户密码登录(每个人都使用相同的用户帐户)。我不认为放弃这样的密码是个好主意,所以我想办法让用户在不知道登录密码的情况下使用该应用程序。到目前为止我的想法。

(1)生成一个ssh密钥并将其放在每个Android设备上。 (我不知道如何做到这一点,或者是否有可能)。

(2)加密密码并将其存储在手机上,然后为用户创建“应用密码”以登录该应用。

我想了解什么是最佳行动方案。

2 个答案:

答案 0 :(得分:0)

由于它是一个只有10个用户的内部应用程序,为什么不在登录过程中发送手机的IMEI值。然后,您可以在服务器上拥有一个允许IMEI号的小型表/文件。这有点像无线路由器的MAC地址过滤。

答案 1 :(得分:0)

首先,您可以在服务器端限制用户帐户可以执行的操作 - 执行此操作。 (见下面的一些提示。)

其次,我会使用公钥认证方法。为每个用户生成(不同的)私钥并将其存储在他们的手机上(Android手机有某种文件系统,不是吗?),可能是用密码加密的(所以邪恶的手机窃贼不能使用密钥)。

(可能有一些内置的加密密钥保持设备 - 如果是这样,你当然可以使用它。但我不太了解Android在这里提供帮助。)

假设服务器使用OpenSSH sshd,您可以在此用户的主目录中放置~/.ssh/authorized_keys文件,其中包含每个电话私钥的公钥。这些关键行可以包含选项,可用于强制命令(仅允许sftp / scp)或禁用所有类型的转发。 sshd的sshd_config中提供了更多选项 - 您可能希望在这些上传的监狱环境中启动单独的sshd,而不是使用主要的sshd。

从JSch,您可以使用JSch对象的addIdentity方法之一启用公钥验证。 (免责声明:JSch文档由我撰写。)

您还应该使用应用程序提供服务器的公钥(而不是禁用连接检查)以防止中间人攻击。您可以使用setKnownHosts方法向JSch提供已知主机密钥列表。