如何记住一次会话的 SSH 密码

如何记住一次会话的 SSH 密码

请考虑以下场景:

我以“普通”用户身份登录了服务器 A。关于常见的 用户是指一群人可以访问它 —— 它在设计上不受限制且不安全。

假设我需要定期从此用户/服务器登录到服务器B作为用户安全的- 即我需要 scp 拥有的文件安全@serverB

虽然我拥有完全的访问权和控制权安全的用户,我当然不想添加常见的的公钥到可信密钥安全的用户 - 我不希望任何可以登录的人常见的能够以以下身份登录安全的也一样。

我也不想输入安全的每小时输入 5 次 的密码。理想情况下,我希望输入一次,让某个代理或类似人员神奇地记住它 - 但仅限于此登录会话 - 然后在此会话中每次连接时使用它,直到超时到期。实际上,与 没什么不同kinit

有什么可以实现这个目标吗?

答案1

如果您在中间服务器上有共享用户并且该用户具有 shell 访问权限,那么这并不容易,因为几乎所有内容默认都可以通过其他会话访问。
当然,现代内核有办法。
或者,可以使用一种工具利用会话(进程/线程)密钥环将私有数据存储在内核中,或者可以使系统足够安全以禁止同一用户的不同进程相互访问,因此程序可以将身份验证信息保存在受其他会话保护的普通用户空间内存中。无论如何,两者都必须根据一些 PID/SID 信息识别进行身份验证的请求,这对于基本用法来说是可行的。最后,您需要一个守护进程来为您设置会话或将存储的密码传递给您的进程,以便您可以将其与 sshpass 工具或类似工具一起使用。

另一种方法是利用命名空间并挂载私有的 tmpfs 或 tmpdir(虽然 tmpfs 受到比 tmpdir 更好的保护,或者至少从 root 用户来说更不容易访问)。

您可以在单独的端口上使用 sshd,并使用包装器为该用户设置命名空间环境,或者至少在现代系统上最容易地使用 pam 和 pam_namespace.so 来设置私有用户 tmpdir 或 tmpfs。在那里,您可以以明文形式存储您的密码,以供 sshpass 或类似程序使用,或者更好的是,可以将 ssh-agent 的套接字放在该目录中,并将您的个人私钥加载到该代理中,同时确保代理的访问受到保护,不被同一用户的其他会话访问。如果您有一个带有强密码的私钥,您也可以将其存储在机器上。否则您必须转移它。您还可以将整个 /tmp 目录设为这样的私有目录(可能与一些共享的子目录一起)并以相当安全的方式使用 SSH 代理转发(您无法真正保护它不被 root 用户滥用,但至少如果您使用 tmpfs,root 很难使用,普通用户也不可能使用 Auth-Sock)。

无论如何,您需要能够充分配置服务器,或者需要充分配置服务器 - 至少使用户的进程不能相互连接。

答案2

你可能正在寻找ssh-agent,它随 OpenSSH 一起提供。使用该-t选项设置超时。

相关内容