dairen0 2019-04-29
你将登录,可以处理工作了。这个连接背后发生了什么?关键部分又是什么?
我认为将SSH分解为对SSH连接来说最重要的四个文件是好主意,那样你就能更好地了解工作原理,从而开始使用该工具。
不妨看看那些关键的文件。
known_hosts
对SSH来说这个文件非常重要。~/.ssh/known_hosts文件包含你登录的计算机的SSH指纹。这些指纹是使用远程服务器的SSH密钥生成的。通过安全外壳连接到远程计算机时,系统会问你是否想要继续连接(图A)。
图A. 连接或不连接,那是个问题
你对该问题回答“是”时,远程主机指纹将保存到known_hosts文件中。该密钥将显示为随机字符串。每个条目将以| 1 |开头(图B)。
图B. 已知的主机文件
连接发生的情况如下:
1. 你尝试通过客户端与远程服务器建立连接。
2. 远程服务器将其公钥发送给客户端。
3. SSH客户端在~/.ssh/known_hosts中搜索密钥指纹。
4. SSH客户端加载并验证密钥。
5. 进行用户身份验证
6. 如果身份验证成功,你将登录到远程计算机。
同样,在该连接过程中,如果未找到远程指纹,SSH客户端将询问你是否要继续,当你回答继续时,将指纹保存到~/.ssh/known_hosts。
authorized_keys
在~/.ssh目录中,还有另一个名为authorized_keys的文件。该文件与known_hosts文件大不一样。authorized_keys包含从远程客户端拷贝到服务器的所有SSH身份验证密钥。这用于SSH密钥身份验证。
为了使密钥验证正常工作,客户端的公钥将拷贝到远程服务器上的~/.ssh/authorized_keys文件。最简单的方法是在客户端上使用ssh-copy-id命令,就像这样:
系统将提示你输入远程用户的密码。验证成功后,来自客户端的公钥将拷贝到远程服务器上的~/.ssh/authorized_keys文件中。如果你打开该文件,会看到每个条目都以ssh-rsa开头,并以客户端计算机的username@hostname结尾(图C)。
图C. authorized_keys文件示例
一旦该密钥保存到authorized_keys(在远程服务器上),你可以使用SSH密钥身份验证登录到该服务器(从已保存公钥的客户端登录)。
ssh_config
/etc/ssh/ssh_config文件是用于SSH的系统范围客户端配置的文件。此处看到的配置仅在ssh命令用来连接到另一个主机时才起作用。你通常不需要编辑该文件。
sshd_config
另一方面,/etc/ssh/sshd_config文件是SSH守护程序的配置文件。在这里,你配置以下内容:
比如说,假设你只想允许密钥验证并禁用密码验证。在远程服务器上,可以编辑sshd_config文件,如下所示:
将#PubkeyAuthentication yes改成Pubkeyauthentication yes。
将#PasswordAuthentication yes改成PasswordAuthentication no。
一旦完成这些更改,重新启动ssh服务,远程服务器将只允许来自~/.ssh/authorized_keys中有条目的客户端计算机的连接。远程服务器的authorized_keys文件中没有条目?那就无法访问。
了解那些文件
如果了解上述四个文件,你可以更好地使用SSH工具。你需要知道这些文件是如何运作的吗?并不需要。不过作为管理员,如果你对使用的工具有更深入的了解,就会从中受益。
想了解更多信息,请阅读以下参考手册页:
man ssh
man ssh_config