1 SSH登陆原理
SSH,Secure Shell,是一套协议标准,可以用来实现两台机器之间的安全登陆以及安全的数据传送,其保证数据安全的原理是非对称加密。
传统的对称加密方式使用的是一套密钥,数据的加密和解密用的是这一套密钥,所有的客户端和服务端都得存储这套密钥,泄漏风险很高,并且一旦泄漏,如果对数据拦截,就可通过该密钥解密获取数据内容,因此数据的安全性得不到保证。
非对称加密方式解决的就是这个问题,它包含两套密钥-公钥以及私钥,其中,公钥用于加密,私钥用于解密,并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,公钥可随便传递,即使公钥泄漏也能保证数据安全。
其中,客户端与服务端都各自拥有一套公钥和私钥,但必须有对方的公钥才能对数据加密后被对方所感知,这个过程是在连接时完成的,过程如下所示:
(1)客户端发起连接请求
(2)服务端返回自己的公钥以及会话ID --> 客户端得到服务端的公钥
(3)客户端生成密钥对
(4)客户端用自己的公钥异或会话ID,计算出一个值,并用服务端的公钥进行加密
(5)客户端发送加密后的值到服务端,服务端用私钥解密
(6)服务端用解密后的值异或会话ID,计算出客户端的公钥 ---> 服务端得到客户端的公钥
(7)至此连接建立,双方都各自持有三个密钥,分别为自己的一对公私钥以及对方的私钥,之后所有的通讯都会被加密。
需要注意的是,当两台机器第一次使用SSH连接时,当服务端返回自己的公钥的时候,客户端会有一条提示信息,大意是无法验证对方是否可信,并给出对方公钥的MD5编码值,问是否确定要建立连接。如下图所示:
原因:尽管SSH传输过程很安全,但首次建立链接时并没有办法知道发来的公钥是否真的来自自己请求的服务器,如果有人在客户端请求服务器后拦截了请求,并返回自己的公钥冒充服务器,这时候如果链接建立,那么所有的数据都能被攻击者用自己的私钥解密,这就是所谓的中间人攻击。
2 常用认证方法
常用的认证方法包括账号密码登陆和公钥登陆两种。无论是哪一种都需要预先在服务端进行配置。
2.1 账号密码登陆
特征:客户端通过账号密码进行登陆。但是只有当账号密码存在于服务端中才能验证通过。
连接建立过程如下:
(1)服务端收到登陆请求后,首先互换公钥,如上所示。
(2)客户端用服务端的公钥加密账号密码并发送
(3)服务端用私钥解密后得到账号密码,然后进行验证
(4)服务端用客户端的公钥加密验证结果后返回
(5)客户端用自己的私钥解密后得到验证结果
2.2 公钥登陆
特征:客户端通过root账号进行登陆则自动启用公钥登陆,无需输入密码,但是只有当本身的公钥存在于服务端的authorized_keys文件中才能验证通过。
方法:将要免密登陆机器的公钥添加到服务端的authorized_keys文件中即可,其中,服务端该文件目录固定为/root/.ssh/authorized_keys。
连接建立过程如下:
(1)客户端用户必须手动的将自己的公钥添加到服务器一个名叫authorized_keys的文件里。(该文件保存了所有可以远程登陆的机器的公钥)
(2)客户端发起登陆请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥)
(3)服务端根据指纹检测此公钥是否保存在authorized_keys中
(4)若存在,则服务端生成一段随机字符串,然后用客户端公钥加密后返回
(5)客户端收到后用自己的私钥解密,再利用服务端公钥加密后返回
(6)服务端收到后用自己的私钥解密,如果为同一字符串则验证通过建立连接。
2 远程登陆
ssh -p port
3 远程数据CP
3.1 基本命令格式
命令:scp [options] [原路径] [目标路径]
用法:将原路径中的内容cp到目标路径中。
3.2 options说明
如果是复制文件,则无需指定options参数,如果是复制目录,则为-r
如果需要指定端口,则需要使用-P参数,格式为:-P port
常用命令形式:
从远程机器cp数据到本地机器
scp [options] 客户端名@IP:远程文件目录 本地目录
将本地机器的内容cp到远程机器
scp [options] 本地目录 客户端名@IP:远程文件目录