SSH 原理及简单使用
1,SSH 概念
SSH(Secure Shell,SSH)即安全外壳协议,是专为远程登录会话而提供的一种安全性协议,默认端口 22 。注意区别于Talnet(远程登录)、FTP (文件传输)等明文传输协议。
SSH 协议的实现一般有商业实现和开源实现。我们主要讨论的是针对于 OpenSSH 的开源实现。
OpenSSH 是一个开源库,是基于 OpenSSl 密码库实现的一个安全远程登录协议,而 OpenSSL 是一个 C 语言实现的密码库,提供了相当丰富的密码学组件。具体可参考文末相关链接。
2,SSH 原理
首先了解基本的登录模式:
Client 向 Server 提供密码并得到确认后,即认证成功可以登录。但这里的问题是,密码的安全性问题?认证的安全性问题?SSH 使用了公钥密码机制提升安全性。即 Server 自己生成一对公私钥,并把公钥安全的发送给 Client,使用自己的私钥进行验证。当然,这个认证是相互的,客户端也要认证服务端。同时,这里注意区别于 HTTPS 中基于 CA 的认证模式。
但是安全的发送过程,可能会面临着中间人攻击的情况。目前较好的解决办法是,由客户端足确认目标服务器的公钥是否可信,一旦可信就会把 Host 加入自己的 known_hosts 中。比如可能会出现下面的情况:
The authenticity of host 'ssh-server.example.com (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)?
上面表明,是否授信远程主机的公钥(RSA生成的公钥有1024位,这里取得是经过MD5的指纹信息)。
此时输入yes,就会出现下面信息:
Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts.
Password: (enter password)
表明客户端已经确认连接,远程主机会被加入到 known_hosts 中,然后输入密码即可完成登录。
3,SSH 免密登录
每次登录都要输入密码特别不方便,尤其是在集群环境中,各主机之间的通行非常频繁的情况下。SSH 提供了免密登录策略。
基本流程:
4,SSH 实战
配置服务器免密服务的基本的流程为:
1,进入客户端家目录.ssh
文件夹下
cd ~/.ssh
2,生成公私钥
ssh-keygen-t rsa
3,拷贝公钥到目标服务器上
ssh-copy-id xxx
- authorized_keys:存放授权的客户端公钥;
- id_rsa:存放私钥;
- id_rsa.pub:存放公钥;
- known_hosts:存放已经访问过的主机信息。
使用时,只需执行 ssh xxx 即可登录目标服务器。
类似的,在使用 git 登录 github 时,也会进行类似 SSH 免密授权操作。
【参考链接】