SSH 原理简介及使用教程
1,SSH原理
简单来说,SSH是一种网络协议,用于计算机之间的加密登陆。假定本地主机的名字是localhost,远程主机的名字是cloudhost。现在要从localhost登陆cloudhost,如果使用SSH协议,则被认为是安全的。
登陆过程如下:
序号 | 动作 | 说明 |
---|---|---|
1 | 远程主机cloudhost收到本地主机localhost的的登陆请求,把自己的公钥分发给用户 | 公钥由远程主机制作,由远程主机分发给本地主机 |
2 | 本地主机localhost使用得到的公钥加密登陆密码,发给远程主机cloudhost | 本地主机发给远程主机的是公钥加密过的登陆密码 |
3 | 远程主机cloudhost使用自己的私钥解密登陆密码,如果密码正确,同意登陆 | 远程主机使用私钥解密得到登陆密码,与正确密码比对。正确密码由远程主机设置 |
当本地主机localhost得到的公钥不是来自远程主机cloudhost,而是来自第三者,但被误认为来自远程主机cloudhost时,本地主机的登陆操作会泄露密码,遭到中间人攻击。
SSH针对中间人攻击,应对如下,第一次登陆时,会弹出如下信息:
$ ssh user@host
The authenticity of host 'host (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?
这段话的意思是,无法确定host主机的真实性,只知道它的公钥指纹,请问还要继续连接吗?
所谓”公钥指纹”,是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。 这时,需要远程主机在自己的网站上贴出公钥指纹,本地主机才能进行比对。
2,SSH登陆方式
SSH 有两种登陆方式,分别是口令登陆和公钥登陆,后者又称免密码登陆。
对于口令登陆,在经历过上文叙述,比对过公钥指纹,接受远程主机的公钥后,远程主机就就会保存在.ssh/known_hosts
之中,下次再连接这台主机后,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
每个SSH用户都有自己的known_hosts
文件,此外系统也有一个这样的文件,通是/etc/ssh/ssh_known_hosts
,保存一些对所有用户都可信赖的远程主机的公钥。
对于公钥登陆方式,则是用户把自己的公钥存储在远程主机上。登陆的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发送回来,远程主机用实现存储的公钥进行解密,如果成功,则证明用户是可信的,直接允许登陆,不再要求密码。远程主机会将本地主机的公钥,保存在authorized_keys
文件中。
2,设置
步骤如下:
步骤 | 代码 | 说明 |
---|---|---|
1 | ssh-keygen -t rsa | 生成公钥和私钥 |
2 | ssh-copy-id user@10.124.84.20 | 将公钥上传到远程主机上,并写入authorized_keys文件中 |
强调:.ssh
目录的权限为700,其下文件authorized_keys
和私钥的权限为600。否则会因为权限问题导致无法免密码登录。
3,总结
登陆方式 | 公钥私钥制作者 | 分发方向 | 加密 | 解密 |
---|---|---|---|---|
口令登陆 | 远程主机 | 远程主机分发公钥到本地主机 | 本地主机公钥加密 | 远程主机私钥解密 |
公钥登陆 | 本地主机 | 本地主机分发公钥到远程主机 | 本地主机私钥加密 | 远程主机公钥解密 |