在 Android 设备上存储 SSH 私钥

信息安全 linux SSH 密钥管理 安卓
2021-08-20 22:19:51

(我不确定这是否更适合 unix.se 或 android.se,但由于它主要与安全相关,我在这里问它)

我使用我的 Android 设备访问服务器以进行快速的移动管理。在您询问之前,该设备已使用相当强的密码进行加密。

我正在使用 CyanogenMod 提供的标准终端仿真器。这为我提供了一个简单的 Bash shell 提示,然后我可以在其中ssh进入我想要的服务器。

我遇到了几个问题和安全隐患:

  1. 应用程序以用户身份运行u0_a24,但 Dropbear SSH 主页设置为/data/.ssh. 这意味着除非我是root,否则我无法在不公开文件的情况下访问这些文件:不好。
  2. 如果我只是将我的私钥存储在我的(尽管)加密的 sd 卡上,其他应用程序可能能够访问它。我已经使我的私钥相当强大(PKCS8 中的许多 PBKDF2 迭代),但我仍然对其他应用程序访问它不感兴趣。

推荐的处理方法是什么?有没有人在Android上这样做过运气?

3个回答

或者,您可以考虑 JuiceSSH 客户端。它将您的密钥存储在其私有应用程序目录中。此外,它会加密其存储空间,因此即使是越狱手机也能提供一定程度的保护。

资料来源:
-@JuiceSSH:“外部存储将无法工作,因为密钥已导入内部 JuiceSSH 数据库”。
- @JuiceSSH:“它们 [ssh 密钥] 存储在加密的 SQL 数据库中,但您可以通过长按身份导出它们”。

我找到了一种两全其美的方法。

rm /data/.ssh
mkdir /data/data/jackpal.androidterm/app_HOME/.ssh
chown u0_a100:u0_a100 /data/data/jackpal.androidterm/app_HOME/.ssh
mv /storage/sdcard0/id_rsa /data/.ssh/id_rsa
touch /data/.ssh/{config,known_hosts}

这样,只有应用程序用户可以访问私钥,其他用户无权访问它。

选项 1 可能会为您提供最好的安全性。如果您将任何内容移动到您的 SD 卡,默认情况下它是其他应用程序的免费游戏。使用 SU 应用程序,您可以(并且应该)定义有关何时授予应用程序 SU 权限的规则,包括时间限制,这让您的访问权限更加精细。