1:基本加密、认证概念

1:基本加密、认证概念

如何通过 Windows、Linux 或 MacOSX 客户端设置 ssh、基于密钥(“无密码”)的客户端登录到 Linux/MacOSX sshd 服务器?

[寻求基于密钥的 ssh/sshd 登录的基本概念理解,以及所有上述操作系统的设置操作示例。]

答案1

较喜欢:

  1. 讨论密钥加密概念的简明基础知识(试图揭开魔法的神秘面纱)
  2. 将上述概念应用于网络登录(身份验证)
  3. 提供详细的操作示例/程序。

1:基本加密、认证概念

公钥生成加密只有私钥才能解密的数据。无论这些数据是什么。[可以是一个简单的文本文件……或者某种质询-应答认证系统(详情见下文)...这只是一种加密-解密机制。] 例如,有人可以使用“Johnny Utahh”的公钥加密电子邮件内容,而生成的加密输出只能使用 Johnny Utahh 的私钥解密。因此,为了支持“安全和私密”的通信,将所述私钥保存在安全的地方(最好不要通过网络传输)非常重要。

2:应用上述概念实现无密码登录

“无密码”登录通常通过质询-响应认证系统。“登录”的系统(称为 MachineA)提出一个“问题”(可能只是一个随机字符串),使用与“想要登录的机器(称为 MachineX)”相关联的公钥加密该问题。MachineX 解密该问题并将解密的问题作为“答案”传回,以供 MachineA 验证。验证后,MachineA 授予 MachineX 登录(给 MachineA)。

~/.ssh/authorized_keys所有这些都假设 MachineA在上述交换发生之前拥有 MachineX 的公钥(在 Linux 系统上,通常存储在“登录”帐户的 中)。这就是为什么需要将公钥的副本存储在MachineA:~/.ssh/authorized_keys文件中。从理论上讲,该文件也可以命名~/.ssh/authorized__public__keys……如果这样命名,可能会主动避免许多用户产生混淆……但据推测,“分布式”密钥是公钥,因此我们怀疑设计者认为“公共”这个形容词可能是多余的。

3:详细的操作示例/程序

(前言:假设要登录的服务器/机器有一个正在运行的sshd守护进程。此外,可以在回答“如何设置 SSH 以便我不必输入密码?”,但不包括 Windows 客户端等。)

为客户端 (ssh) 登录过程创建密钥对。在 Windows 上,考虑使用PuTTYgen创建新的密钥对,当然包括公钥。对于 Linux/MacOSX,建议ssh-keygen(1)。请参阅在 Unbuntu (Linux) 11.04 上运行的密钥对创建会话示例:

joeschmo@MachineX:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/joeschmo/.ssh/id_rsa): 
Created directory '/home/joeschmo/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/joeschmo/.ssh/id_rsa.
Your public key has been saved in /home/joeschmo/.ssh/id_rsa.pub.
The key fingerprint is:
e8:36:69:c5:9a:d2:e3:e0:53:f3:34:d4:d0:a2:8a:80 joeschmo@MachineX
The key's randomart image is:
[... <output truncated by author to save space> ...]
joeschmo@MachineX:~$ ls -la .ssh
total 16
drwx------ 2 joeschmo joeschmo 4096 Oct 20 12:26 .
drwxr-xr-x 3 joeschmo joeschmo 4096 Oct 20 12:26 ..
-rw------- 1 joeschmo joeschmo 1679 Oct 20 12:26 id_rsa
-rw-r--r-- 1 joeschmo joeschmo  408 Oct 20 12:26 id_rsa.pub
joeschmo@MachineX:~$ cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp8nle6B68HgVQoQ8hCyQI9yKjsKnThRS0FjWsOwXId8Mc6i9E3zM0ByxBeneIFP8O42dwYmM9zwWrpP8zvpSbo0J2qIfhm+kZibClJnIIY8nVJt5AbXGdoQHOnxKOJUqP9EZgOgMqEjBNB3IVi7jPw2AXcMeZb1SCCbwsLWXzueECJP7Z4oJTU5+hD0grFMaWNhSszdpSD2Xo1hWi2fPdBu/cRMV4LTD3L7pOI57HeXS2mcLoznQohV7OV4RvDgRS9hhHi1A5/bzg9zRHJBISB0sxnwjmfz/kTaljBVZ8xtM9LenkmQYyj6B+0P+BFDAxzHIJKNOrf+i92fuLktoP joeschmo@MachineX
joeschmo@MachineX:~$ 

在上面的 Linux 示例中,/home/joeschmo/.ssh/id_rsa包含私钥(它只是文本),/home/joeschmo/.ssh/id_rsa.pub包含公钥(它也只是文本)。我在上面的示例中也没有输入密码,只是输入“return”表示“无密码”。

[作者注:以前从未使用过公钥密码,但这样做时,需要重新输入密码才能“访问”公钥……大概密码正在加密公钥,但我不确定。如果每次都需要输入上述密码,那么这就违背了无密码登录的目的。也许这只是一次性输入?可能是以后的作业……]

以上所有过程都代表客户端(机器)“登录“) 程序。现在进入服务器端(机器“登录“) 设置。

您需要将内容附加到授予无密码登录权限的机器的文件id_rsa.pub中。(注意:确保关闭“组”和“其他/世界”权限,否则 sshd 通常不会读取所述文件,大概是因为它被视为“不安全”)。 ~/.ssh/authorized_keysjoeschmo@MachineX~/.ssh/authorized_keys笔记:ssh-复制-id自动化/简化此过程。

就这样。如果您只想从一台机器无密码登录到另一台机器,那就完成了。

但是...更普遍一点...

将私钥保存在一台机器上(从而识别该机器——我们称之为“MachineX”),并将该对的公钥部分复制到每台将授予 MachineX 登录权限的机器上。因此,机器 A、B、C 都将 MachineX 的公钥副本放在各自的~/.ssh/authorized_key文件中,以使 MachineX 能够登录到机器 A、B 和 C。(此外,您还可以在机器 A、B 和 C 中分别记录来自不同密钥对的许多其他公钥……~/.ssh/authorized_keys以允许从 MachineX 以外的机器登录。)例如:

Machine X pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine A
Machine X pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine B
Machine X pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine C

上述操作允许 MachineX 的登录用户无需输入密码即可登录 A、B 或 C 中的任意一个。

或者:

Machine Y pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine A
Machine Y pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine B
Machine Y pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine C

上述操作允许 MachineY 的登录名无需输入密码即可登录 A、B 或 C 中的任意一个。

因此....当以上所有内容都“应用”时....机器 A、B 和 C 都在 A、B 和 C 中拥有 X 和 Y 的公钥的副本~/.ssh/authorized_keys

还要注意,每个公钥/私钥对通常与机器上的某个帐户相关联(在上述情况下,即机器 X 和 Y)。例如,johnnyutahh@MachineX、pappas@MachineY 等。

无论如何,公钥/私钥对中的私钥只存在于一台机器上(如果你“做得对”),并且永远不会通过网络传输。因此它是私有的。因此它是“安全的”。相反,公钥会被四处传播,并被到处复制。

下面的文件示例包含来自我的、、(来自上面的 ssh-keygen 示例)~/.ssh/authorized_keys的公钥,并且可能包含其他公钥。请注意,每行末尾的这些“地址”只是注释;它们只是任意文本,用于帮助人们确定哪个密钥是哪个,并且实际上不会被任何自动化系统/程序用来做任何事情。johnnyutahh@my-laptop[email protected][email protected]joeschmo@MachineX

root@MachineA Oct 20 02:20:12 ~# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyTNCV7NUBssxobBZqWormtzcUmICSeGPTSp1i48FVIAebvpgAv7Pb3lFG3vFP8e88w9zGjFnZ6GzTQEwQaTL9YJ/Q9zOvAuxjb8chJz86j9Pg+S8ic4G34c2Og8UoNbTDWYOAZaP/axpoC9W81bh0tjldPnGQuifm9ELHXMXjfGq9QazyPqOcgNG6QL7cl8TYGoj4yJxRwoSytYG65l0/bCFX8JubkFdbWDXNY4tFEfollFIlm10xzQIfz6S6I80Bu0XesFvCjgfLwiLdt+8nT7U9Tawwq8jBc1U0yisQzkSJ9UwXYcKkYX2SJMQ8Ld3Nn82wsisXcEn+Zpe3A6Usw== johnnyutahh@my-laptop
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0zPre+WkOlNgc4KzFRxGj2Y5UwG0gW+kI2LjvgwNYZLHGQqQ0GQGkmg5rulSbyx3WPo1KNCiaqafQ8fWFmXIgKreGWMwEOehnKLyXLhhxvzpYDgJhI1QbwgInLjUCj8krvsdj9fCLY6sFTYFCXLKUptJGbXThcB170kFhJCUlR33H4WfWn4NWzwpmma4HsVDR7F7eUmJE8FD+6AG4Uw9bljDaUS++XghAZ5oXUofGx7FE2vcQKdNAMF5jYIN/XbL4cj4HuJUonqYgyxCX2JpvJePEwMBW1qQffAjgtgs85217OFmfLIVL6rB3RHh1mmIHSVLtOhAZo1okg708scPCw== [email protected]
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC84JdXtzFhQgcFj7/1pz+li2qzZSThJalddkUubuvI71i/Bk7fJ5uI8CCQDPvzr1P+HGaY//RxBG0S2jINXk4LEE1mA3Ogyo+r2ykMaqcNa2JJycHs0sdczZhZR0OOxf5KGz8hhy5W1cdhca6q0AcHmbj+KWz5N0U1qlLptMD4C45QgxtUjFYPWM7r9bDdt6kTo9J39LP4w3S1GTM9uDC8V5NUZX+lFZMap+Tch/YcEiPxAm4VaTM7CGXly+w5XpjlEVUNEb5xu51dOoOXbjueD5Vl3wdPwC6A511v2k9mD/1F4GXjRDzlelKiu4TJ9mVAI2J9+UC0iMUyYj52RO53 [email protected]
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp8nle6B68HgVQoQ8hCyQI9yKjsKnThRS0FjWsOwXId8Mc6i9E3zM0ByxBeneIFP8O42dwYmM9zwWrpP8zvpSbo0J2qIfhm+kZibClJnIIY8nVJt5AbXGdoQHOnxKOJUqP9EZgOgMqEjBNB3IVi7jPw2AXcMeZb1SCCbwsLWXzueECJP7Z4oJTU5+hD0grFMaWNhSszdpSD2Xo1hWi2fPdBu/cRMV4LTD3L7pOI57HeXS2mcLoznQohV7OV4RvDgRS9hhHi1A5/bzg9zRHJBISB0sxnwjmfz/kTaljBVZ8xtM9LenkmQYyj6B+0P+BFDAxzHIJKNOrf+i92fuLktoP joeschmo@MachineX
root@MachineA Oct 20 02:20:19 ~#

相关内容