我想用dropbear
作为替代方案,最小的 ssh-server 和 -client。 dropbear
允许使用私钥-公钥进行 ssh 访问,尽管这些密钥与所使用的密钥不同openssh
,必须使用dropbearconvert
- 命令进行转换(这很容易做到)。
我遇到的问题是dropbear
本身不支持加密的私钥。但原则上我希望避免将未加密的 ssh 密钥留在我的笔记本电脑上。
因此我的问题是:是否有人对如何规避该问题有任何好的想法,并有一个方法(脚本?):
- 解密我用于 dropbear 的密钥(例如使用
gnupg
)并将它们加载到内存中, - 将它们传递给
dbclient
-binary(dropbear
-client-application),并且 - 启动 ssh 连接
另外,我想知道 dropbear 是否存在ssh
-config 选项(尤其是 的选项Host
)的替代方案(因此是否可以为 dropbear 创建一个特定于主机的配置文件,我可以在其中指定例如 IP-地址、端口和其他详细信息)。
答案1
看起来dbclient
完全愿意从命名管道或 FIFO 读取私钥。
所以通过bash的进程替换,你可以这样写:
dbclient -i <(cat .ssh/id_dropbear) user@server
因此,如果你有一个加密的 GPG .ssh/id_dropbear.gpg
,你可以将其写为:
dbclient -i <(gpg --decrypt .ssh/id_dropbear.gpg) user@server
输入解密密码后,dbclient
使用您的 GPG 加密私钥登录。所以这部分工作正常。
这里的主要问题是,如果您.ssh/id_dropbear
之前已经以未加密的方式存储,则可以通过取证来恢复它。要动态加密来自 的密钥dropbearconvert
,您可以应用相同的原理:
$ dropbearconvert openssh dropbear \
.ssh/id_openssh >(gpg --symmetric --output .ssh/id_dropbear.gpg)
Key is a ssh-rsa key
Wrote key to '/dev/fd/63'
但它在实践中似乎并没有太大用处,因为dropbearconvert
它只为 OpenSSH 的加密私钥提供非常有限的支持。对于这个例子,我必须专门创建一个 OpenSSH 密钥来dropbearconvert
理解......
不幸的是,这个技巧似乎对dropbearkey
命令根本不起作用,由于某种原因,命令坚持写入临时文件并重命名它,完全绕过管道。
因此,看来您别无选择,只能首先生成私钥tmpfs
(例如在Live CD 中/dev/shm
或从 Live CD 中生成),然后从那里对其进行加密。