1.什么是SSH登录
SSH是一种网络协议,用于计算机之间的加密登录。
相比传统的账户密码登录,SSH提供了一种更便捷安全的登录方式。
2.SSH登录流程
登录操作如下
ssh user@host
SSH之所以能保证安全,是因为它采用了公钥加密。
整个流程如下:
(1)远程主机收到用户的登录请求,将自己的公钥发给用户
(2)用户使用这个公钥,将登录密码加密后,发送给远程主机
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录
3.中间人攻击
SSH登录本身是安全的,问题在于,如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,
那么用户很难辨别真伪。因为不像https,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
攻击者插在用户和远程主机之间,用伪造公钥,获取到用户的登录面后,再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了,
这就是著名的“中间人攻击”
4.口令登录-公钥加密(用户端),私钥解密(远程主机)
如上图所示,第一次登录时,会提示用户
The authenticity of host '121.43.230.217 (121.43.230.217)' can't be established.
ECDSA key fingerprint is SHA256:NfXOYhYDaY7cs57XoMqAS+5D+rG8mKTumqyo+8SCO9o.
Are you sure you want to continue connecting (yes/no)?
意思是无法验证用户的公钥,是否正确,询问用户是否要继续。
ECDSA key给出了远程主机公钥的SHA256编码过的值,一般在远程主机的网站会告示公钥的值,
用户可以将这个公钥和网站上的公钥进行比对,正确则表明是远程主机。
输入yes之后,系统会将公钥加入到已知的主机列表,如下所示,已知列表中的主机,下次不会再询问。
Warning: Permanently added '121.43.230.217' (ECDSA) to the list of known hosts.
5.公钥登录-私钥加密(用户端),公钥解密(远程主机)
使用密码登录,每次都必须输入密码,非常麻烦,好在SSH还提供了公钥登录,可以省去输入密码的步骤。
公钥登录的流程如下:
用户将自己的公钥放在远程主机上,登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。
远程主机用实现储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
这种方式要求用户提供自己的公钥,如果没有,可以使用ssh-keygen生成一个:
ssh-keygen
运行之后,会在/root/.ssh/目录下,分别生成公钥和私钥:id_rsa.pub和id_rsa
输入以下命令,将公钥传送到远程主机,公钥会添加到远程主机/root/.ssh/authorized_keys文件中,公钥登录的设置就完成了。
ssh-copy-id user@host