SSH原理与应用
什么是SSH
SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
如何能够保证安全
SSH之所以能够保证安全,原因在于它采用了公钥加密。
公钥:顾名思义是公开给别人的,A公开给B,B就能通过A的公钥来解密A的报文
密钥:自己留着。作用是认证。鉴别用户真伪。解释下:如何知道这是A的报文,因为只有A知道他自己的私钥然后用私钥加密数据,所以B如果解开了报文,就能肯定这报文就是A的不是别个伪装的,不然也解不开
整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
因此通过以下两种方式 实现ssh 避免以上风险。
口令登录
ssh user@host
返回一个公匙指纹
要登陆的用户需要验证公钥指纹 是否继续下一步
继续输入密码
密码正确:用户登录成功
用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
公钥登录
使用密码登录,每次都必须输入密码,非常麻烦。SSH还提供了公钥登录,可以省去输入密码的步骤。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
这种方法要求用户主机必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
$ ssh-keygen
结束后再$HOME/.ssh/目录下生成两个文件id_rsa.pub(公匙)和id_rsa(私匙)
通过以下命令可以将公匙传入到指定主机上
$ ssh-copy-id user@host
尝试登录登陆成功
authorized_keys文件
远程主机将本机用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys
文件中。
公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
因此该用户可以保存多个用户的公匙,多个用户都可以免密登录该主机的用户。
本地用户可以通过以下命令来这设置将自己的公匙添加到要登陆对象的authorized_keys文件中。
$ HOME/.ssh可能是隐藏的 通过命令
$ ls -al
查看全部文件
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
总结:ssh是一个网络协议,实现安全的登录到远程主机,通过通过相关的配置,可以是实现免密用户登录。
参考:http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
https://blog.csdn.net/geqiandebei/article/details/42319531