![使用 SSH 密钥登录未知/受感染的服务器不是很危险吗?](https://linux22.com/image/1343642/%E4%BD%BF%E7%94%A8%20SSH%20%E5%AF%86%E9%92%A5%E7%99%BB%E5%BD%95%E6%9C%AA%E7%9F%A5%2F%E5%8F%97%E6%84%9F%E6%9F%93%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8D%E6%98%AF%E5%BE%88%E5%8D%B1%E9%99%A9%E5%90%97%EF%BC%9F.png)
假设我向某人提供了我的公共 SSH 密钥 id_rsa.pub,他/她将其安装在受到攻击的服务器上,然后要求我登录。
登录过程是否涉及将我的私钥发送到受感染的服务器?
如果是,那么攻击者现在可以访问我的私人 SSH 密钥,这很可怕。
如果没有,那么为什么我在 ssh -vvv 输出中看到此行:
debug1: Server accepts key: pkalg ssh-rsa blen 277
这意味着私钥已发送到服务器,并且服务器接受了它。
我是否误解了这个问题?
答案1
不, 你的私人的密钥永远不会被“发送”或传输到任何地方。
公钥加密与传统的用户名/密码验证不同。
你的公钥就是公开的。分享它是绝对安全的。将你的公钥发送给某人可能会泄露你的身份(人们可以知道这是你发的,因为这是一个唯一的数字),但它绝不能允许其他人冒充你或以你的身份进行身份验证。你也可以在 SuperUser 上或通过常规 HTTP 在你的网页上发布你的公钥;这是绝对安全的,但如果有人没有你的私钥,那就完全没用了。
你的私钥就是私有的。它只驻留在您拥有并信任的系统上(希望如此),并且应始终使用解锁密码进行加密,以最大程度地保证安全,以防有人获得存储它的系统的物理访问权限。私钥永远不会由任何正确实施且按照公钥加密规则运行的安全程序传输。也就是说,除非您的本地系统上有程序受到攻击并且能够读取您的私钥(并且私钥未使用密码加密),否则您的私钥始终是安全的。
消息是签使用私钥,在你的电脑,然后再发送到远程服务器。因此,您不是将私钥发送到远程服务器,而是发送一条消息加密后私钥。但这两件事并不相同:你不能派生签名消息中的私钥;这是公钥加密的一部分。
简而言之,即使敌对攻击者获得了你的公钥和即使获得了由您的私钥签名的消息,他们仍然无法获得您的实际私钥,因此,他们也无法冒充您的凭据或使用您的私钥“以您”的身份进行身份验证。
答案2
您误解了这个过程。
并不发送密钥,而是通过使用公钥加密某些内容来构建“挑战”,而该公钥只能使用匹配的私钥解密。
如果确实要求您输入密码,或者您将 X 转发到受感染的服务器,则存在潜在的安全风险。