前言
ssh(Secure Shell)
是一种用于远程管理和安全数据传输的协议。它提供了一种安全的方式,使得用户可以在不安全的网络上登录到远程计算机并执行命令。ssh
的应用广泛,不仅可以用于远程登录,还可以进行文件传输、端口转发等操作。本文将探讨ssh
的基本原理和组成,以及ssh
的两种级别的验证方法。
ssh登录及原理
首先我们都知道ssh
是一个远程授权的协议,通过ssh
可以进行一些远程登录等操作,而scp
就是在连接上远端服务器的ssh
后又启动了一个scp
进程,通过操作系统的stdin
和stdout
进行数据通信。
而火热的xshell
和xftp
其实就是对这两个命令的封装,xshell
用来远程登录,xftp
用来远程传输文件。
在ssh
之前,其实就有一些能够实现远程登录的方式了,比如telnet
(终端仿真协议),rcp
(scp就是对rcp的升级),ftp
等,但它们都是不安全的,并且会用明文传输密码,即使在私网上也有篡改和窃取的风险。
传统的远程服务如ftp
很容易受到中间人攻击,所谓中间人就是存在另一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户将数据发送给真正的服务器。
ssh
:secure shell
是由IETF
制定的建立在应用层基础上的安全网络协议,专为远程登录会话和其他网络服务提供安全性的协议,通过SSH
可以将所有传输的数据进行加密(RSA),同时能防止DNS
欺骗和IP
欺骗,并且数据经过压缩,可以加快传输的速度。
ssh组成与实现
- 传输层协议SSH-TRANS : 这部分提供了服务器认证,保密性及完整性,此外它还能够提供压缩功能,
SSH-TRANS
通常运行在TCP/IP
之上,也可能用于其他可靠的数据流上,TRANS
提供了强力的加密技术、密码主机认证及完整性保护 - 用户认证协议:用于向服务器提供客户端用户鉴别功能,运行在运输层协议上,从低层协议接受会话标识符
- 连接协议:将多个加密隧道分成逻辑通道,运行在用户认证之上,提供交互式登录话路、远程命令执行。转发
TCP IP
连接等
ssh
协议的具体实现:
- 服务器建立公钥,每次启动
sshd
服务时,sshd
会主动去找/etc/ssh/ssh_host*
文件,如果系统刚创建还没有这些文件,那么sshd
会主动计算出这些公钥,同时也会计算出自己需要的私钥 - 客户端主动联机请求,如果客户端想要联机到
ssh
服务器,需要一个客户端程序,比如已经可以使用ssh
的cmd
或者xshell
这种使用了ssh
的应用程序 - 服务器传输公钥给客户端,在拿到客户端请求之后,服务器把公钥给客户端
- 客户端记录并比对服务器公钥的数据,如果是第一次连接,则会把服务器公钥记录下来,如果不是第一次连接,则会去对比之间的记录,查看是否有差异。如果没有问题,客户端会接受这个公钥,然后开始计算客户端自己的公钥和私钥
- 客户端计算出自己的公钥和私钥会后回传给服务器,此时服务器就具有了服务器的私钥和客户端的公钥,客户端就有了服务器的公钥和客户端的私钥,开始非对称加密
ssh两种级别的验证方法
- 第一级(基于口令):只要知道账号和口令,就能够登录到远程主机。所有的传输数据都会被加密,但不能保证连接的服务器是真实想要连接的服务器
- 第二级(基于密钥):客户端需要为自身创建一对密钥,并把公钥放在需要访问的服务器上,如果要连接到
ssh
服务器,客户端会向服务器发出请求,需要用密钥进行安全验证。服务器收到之后,在目录下寻找保存的客户端公钥,再与现在客户端发过来的公钥进行对比。如果两个密钥一致,服务器就会用这个密钥加密chanllenge
并发送回客户端,客户端收到之后用自己的私钥解密,然后再发送给服务器完成登录。(显然安全性比第一级高)
ssh和scp命令格式
使用ssh
登录远程服务器
ssh -p port user@host_ip
然后输入密码
scp
从远程复制文件
传输一个文件
scp -P port username@remote_host:/path/to/remote/file /path/to/local/destination
传输一个目录
scp -r -P port username@remote_host:/path/to/remote/dictory /path/to/local/destination
如果需要用scp
将本地文件复制到远程 只要将命令格式反过来就行
结语
ssh
作为一种安全的远程管理协议,为用户提供了安全、可靠的远程登录和数据传输方式。同时,scp
作为ssh
的衍生工具,提供了文件传输的便捷方式。这两个工具可谓是所有开发人员必会的基本功。