浅析ssh与scp原理及实现

前言

ssh(Secure Shell)是一种用于远程管理和安全数据传输的协议。它提供了一种安全的方式,使得用户可以在不安全的网络上登录到远程计算机并执行命令。ssh的应用广泛,不仅可以用于远程登录,还可以进行文件传输、端口转发等操作。本文将探讨ssh的基本原理和组成,以及ssh的两种级别的验证方法。

ssh登录及原理

首先我们都知道ssh是一个远程授权的协议,通过ssh可以进行一些远程登录等操作,而scp就是在连接上远端服务器的ssh后又启动了一个scp进程,通过操作系统的stdinstdout进行数据通信。

而火热的xshellxftp其实就是对这两个命令的封装,xshell用来远程登录,xftp用来远程传输文件。

ssh之前,其实就有一些能够实现远程登录的方式了,比如telnet(终端仿真协议),rcp(scp就是对rcp的升级),ftp等,但它们都是不安全的,并且会用明文传输密码,即使在私网上也有篡改和窃取的风险。

传统的远程服务如ftp很容易受到中间人攻击,所谓中间人就是存在另一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户将数据发送给真正的服务器。

ssh:secure shell 是由IETF制定的建立在应用层基础上的安全网络协议,专为远程登录会话和其他网络服务提供安全性的协议,通过SSH可以将所有传输的数据进行加密(RSA),同时能防止DNS欺骗和IP欺骗,并且数据经过压缩,可以加快传输的速度。

ssh组成与实现

  1. 传输层协议SSH-TRANS : 这部分提供了服务器认证,保密性及完整性,此外它还能够提供压缩功能,SSH-TRANS通常运行在TCP/IP之上,也可能用于其他可靠的数据流上,TRANS提供了强力的加密技术、密码主机认证及完整性保护
  2. 用户认证协议:用于向服务器提供客户端用户鉴别功能,运行在运输层协议上,从低层协议接受会话标识符
  3. 连接协议:将多个加密隧道分成逻辑通道,运行在用户认证之上,提供交互式登录话路、远程命令执行。转发TCP IP连接等

ssh协议的具体实现:

  • 服务器建立公钥,每次启动sshd服务时,sshd会主动去找/etc/ssh/ssh_host*文件,如果系统刚创建还没有这些文件,那么sshd会主动计算出这些公钥,同时也会计算出自己需要的私钥
  • 客户端主动联机请求,如果客户端想要联机到ssh服务器,需要一个客户端程序,比如已经可以使用sshcmd或者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的衍生工具,提供了文件传输的便捷方式。这两个工具可谓是所有开发人员必会的基本功。

相关推荐
程序员爱技术10 分钟前
Vue 2 + JavaScript + vue-count-to 集成案例
前端·javascript·vue.js
并不会1 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
衣乌安、1 小时前
【CSS】居中样式
前端·css·css3
兔老大的胡萝卜1 小时前
ppk谈JavaScript,悟透JavaScript,精通CSS高级Web,JavaScript DOM编程艺术,高性能JavaScript pdf
前端·javascript
低代码布道师1 小时前
CSS的三个重点
前端·css
耶啵奶膘3 小时前
uniapp-是否删除
linux·前端·uni-app
NiNg_1_2343 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
王哈哈^_^4 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go