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


4

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

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


(我打算用基于密钥的登录概念的描述来回答我自己的问题,包括质询 - 响应和身份验证,然后提供一个操作设置示例。但是我没有足够的重复点来立即回答,所以我需要等待~8小时才能这样做。)
约翰尼犹他州2011年


@ slhck- thx,有帮助的参考。
约翰尼犹他州2011年

Answers:


3

较喜欢:

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

1:基本加密,认证概念

公钥生成只有私钥才能解密的加密数据。这个数据是什么并不重要。[可能是一个简单的文本文件......或某种挑战 - 响应认证系统(详情如下)......它只是一种加密 - 解密机制。]例如,somone可以使用“Johnny Utahh”的公钥加密电子邮件内容,以及由此产生的加密输出,只能使用Johnny Utahh的私钥解密。因此,为了支持“安全和私密”通信,将所述私钥保存在安全位置(最好不通过网络传输)是很重要的。

2:应用所述概念以启用无密码登录

通常使用质询 - 响应身份验证系统启用“无密码”登录。系统“登录”(称为MachineA)会出现一个“问题”(可能只是一个随机字符串),使用与“要登录的计算机(称为MachineX)相关联的公钥加密所述问题”。 “ MachineX解密所述问题并将解密的问题作为“答案”发回,以由MachineA验证。经过验证,MachineA授予MachineX登录权限(到MachineA)。

这一切都假定MachineA具有MachineX的公钥(在Linux系统上通常存储在~/.ssh/authorized_keys帐户“登录”),然后才进行上述交换。这就是为什么需要在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 exmaple中,/home/joeschmo/.ssh/id_rsa包含私钥(它只是文本),/home/joeschmo/.ssh/id_rsa.pub包含公钥(它也只是文本)。在上面的示例中我也没有输入密码,只是输入“no passphrase”的“return”。

[作者注:以前从未使用密码作为公钥,但是当这样做时,需要重新输入密码以“访问”公钥...可能是密码加密公钥,但我是不确定。如果每次都需要输入所述密码短语,那么这种密码登录的目的就会失败。也许这只是一次入境?以后的作业,可能......]

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

您需要将id_rsa.pub内容附加到~/.ssh/authorized_keys授予无密码登录的计算机文件中joeschmo@MachineX。(注意:确保关闭'group'和'other / world'权限~/.ssh/authorized_keys,othwerise sshd通常不会读取所述文件,大概是因为它被认为是“不安全”)。 注意:ssh-copy-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等

在任何情况下,pub / priv密钥对中的私钥只能存在于一台机器上(如果你“正确”)并且永远不会通过网络传输。因此它是私人的。因此它是“安全的”。相反,公钥会被抛到风中并在风中抖动并被复制到整个地方。

~/.ssh/authorized_keys下面的文件示例具有从我的公钥johnnyutahh@my-laptoproot@site1.comroot@hypothetical-site2.comjoeschmo@MachineX(从上面的ssh-凯基为例),并可能包含他人。注意每行末尾的这些“地址”只是注释; 它们只是任意文本,以帮助人类弄清楚哪个键是哪个键,并且实际上并没有被任何自动系统/程序用来做任何事情。

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== root@site1.com
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC84JdXtzFhQgcFj7/1pz+li2qzZSThJalddkUubuvI71i/Bk7fJ5uI8CCQDPvzr1P+HGaY//RxBG0S2jINXk4LEE1mA3Ogyo+r2ykMaqcNa2JJycHs0sdczZhZR0OOxf5KGz8hhy5W1cdhca6q0AcHmbj+KWz5N0U1qlLptMD4C45QgxtUjFYPWM7r9bDdt6kTo9J39LP4w3S1GTM9uDC8V5NUZX+lFZMap+Tch/YcEiPxAm4VaTM7CGXly+w5XpjlEVUNEb5xu51dOoOXbjueD5Vl3wdPwC6A511v2k9mD/1F4GXjRDzlelKiu4TJ9mVAI2J9+UC0iMUyYj52RO53 root@hypothetical-site2.com
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp8nle6B68HgVQoQ8hCyQI9yKjsKnThRS0FjWsOwXId8Mc6i9E3zM0ByxBeneIFP8O42dwYmM9zwWrpP8zvpSbo0J2qIfhm+kZibClJnIIY8nVJt5AbXGdoQHOnxKOJUqP9EZgOgMqEjBNB3IVi7jPw2AXcMeZb1SCCbwsLWXzueECJP7Z4oJTU5+hD0grFMaWNhSszdpSD2Xo1hWi2fPdBu/cRMV4LTD3L7pOI57HeXS2mcLoznQohV7OV4RvDgRS9hhHi1A5/bzg9zRHJBISB0sxnwjmfz/kTaljBVZ8xtM9LenkmQYyj6B+0P+BFDAxzHIJKNOrf+i92fuLktoP joeschmo@MachineX
root@MachineA Oct 20 02:20:19 ~#
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.