【问题标题】:Android to SSH server connection passwordAndroid到SSH服务器连接密码
【发布时间】:2011-12-05 01:06:13
【问题描述】:

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

(1) 生成一个 ssh 密钥并将其放在每个 android 设备上。 (我不确定如何执行此操作,或者是否可能)。

(2) 将密码加密并存储在手机上,然后创建一个“应用密码”供用户登录应用。

我想知道什么是最好的行动方案。

【问题讨论】:

    标签: android ssh password-protection jsch


    【解决方案1】:

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

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

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

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

    在 JSch 中,您可以使用 JSch 对象的 addIdentity 方法之一启用公钥身份验证。 (免责声明:JSch 文档是我编写的。)

    您还应该将服务器的公钥与应用程序一起提供(并且不要禁用对连接的检查),以防止中间人攻击。您可以使用setKnownHosts 方法将已知主机密钥列表提供给JSch。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-08
        • 2011-06-01
        • 2023-03-16
        • 2019-01-13
        • 2012-11-26
        相关资源
        最近更新 更多