服务器标配 SSH 协议,你了解多少?
年初,新冠肺炎疫情的出现,全国数千万名员工在家远程办公,使用个人设备通过家庭网络访问公司资料。因此,IT 安全团队面临了众多新挑战:如何实施更加安全的身份验证方案,以确保只有授权人员和设备才能访问公司敏感资产?
不少小伙伴想起了 SSH,其实大家对它都比较熟悉。大到虚拟机、服务器,小到手机、家电,Linux 设备普及越来越广,SSH 的运用也越来越广泛。不仅攻城狮、程序猿离不开它,普通用户也基本都在使用。SSH 可以说是各服务器的标配,有了 SSH,我们不必每次都要蹲到机房里连接服务器配置服务器,直接远程就可以操作,同样,有了 SSH,也能解决远程办公的一些安全性问题。
下面我们就来详细了解一下 SSH 的传奇故事。

什么是 SSH
SSH(Secure Shell)是一种加密的网络传输协议,它允许用户通过 Internet 控制和修改远程服务器。该协议的出现替代了未加密的登录协议(例如 telnet/rlogin)和不安全的文件传输方法(例如 FTP),并使用了加密技术来确保与远程服务器之间的所有通信都以加密的方式进行。它提供了一种机制,用于验证远程用户,将输入从客户端传输到服务器,以及将输出中继回客户端。

SSH 提供了强大的加密和完整性保护。在客户端和服务器之间建立连接后,SSH 将根据设置中协商的参数对传输的数据进行加密。在协商过程中,客户端和服务器根据使用的对称加密算法达成一致,并生成将要使用的加密密钥。通讯双方之间的通信受到行业标准的强加密算法(例如 AES(高级加密标准))的保护,并且 SSH 协议还包括一种机制,该机制通过使用标准哈希算法(例如 SHA)来确保传输数据的完整性。
SSH 除了提供强大的加密功能外,网络管理员还广泛使用 SSH 远程管理系统和应用程序,交付软件补丁或执行命令并移动文件。
SSH 协议如何工作
任何 Linux 或 macOS 用户都可以直接从终端窗口通过 SSH 进入其他远程服务器。而 Windows 用户可以利用 Xshell、Putty 之类的 SSH 客户端。进入之后就可以与直接操作远程计算机相同的方式执行 Shell 命令。
SSH 默认在 TCP 端口 22 上运行(可以根据需求修改)。服务器在 22 端口上监听传入的连接。如果验证成功,它将对客户端进行身份验证并打开正确的通道来进行安全连接。客户端必须通过与服务器启动 TCP 握手,确保安全的对称连接,验证服务器显示的身份是否与以前的记录(通常记录在 RSA 密钥存储文件中)匹配,并提供所需的用户凭据来开始 SSH 连接。
服务器(主机)身份验证
SSH 协议内置于 Unix 和 Linux 服务器中,以实现系统之间的安全连接。该连接由请求连接到 SSH 服务器的客户端建立。SSH 客户端启动连接建立过程,并使用公共密钥加密技术来验证 SSH 服务器的身份。在设置阶段之后,SSH 协议使用强大的对称加密和哈希算法来确保客户端和服务器之间交换数据的私密性和完整性。
下图是根据 NIST IR 7966 改编而成的,它简化了 SSH 连接的流程:

客户端启动与 SSH 服务器的连接
服务器将其公钥发送给客户端
服务器的公钥保存在客户端的已知主机文件中
客户端与服务器协商连接参数并建立连接
客户端(用户)身份验证
SSH 协议使用传统密码或公共密钥来启用客户端身份验证。但是,鉴于使用密码的风险和效率低下,公钥身份验证被更广泛地使用。SSH 密钥不仅比密码更强大,而且系统管理员还可以绕过基于密码的手动登录。
用户如何使用 SSH 密钥进行身份验证呢?它们可以使用 ssh-keygen 命令与 SSH 客户端(例如 OpenSSH)生成一个公私钥对。创建后,用户将其授权密钥(公共密钥)放入需要连接的服务器上的 authorized_keys 文件中。

当用户使用基于密钥的身份验证远程登录时,OpenSSH 服务器将查找授权密钥,然后用户使用其对应的私钥向服务器进行身份验证。由于不需要手动身份验证,因此通常使用基于密钥的身份验证用于 IT 流程的自动化,例如安全的文件传输,备份和复制流程或配置管理工具(例如 Ansible,Terraform,Chef 或 Puppet) 。
SSH 协议的常见用例
SSH 连接主要用于保护本地计算机和远程主机之间不同类型的通信,包括:
安全远程访问资源
远程执行命令
交付软件补丁和更新
交互式和自动文件传输
除了在本地计算机和远程计算机之间创建安全通道外,SSH 协议还用于管理重要的公司基础结构,例如路由器,服务器硬件,虚拟化平台和操作系统等。
SSH 密钥用于自动访问服务器,通常用于脚本,备份系统和配置管理工具中。由于其设计允许跨组织边界的连接,并且 SSH 密钥提供了单点登录(SSO)功能,使用户无需每次输入密码即可在各个帐户之间移动。
最后,插播段小广告:又拍云的“一键登录”功能,和 SSH 密钥登录类似,用户仅需要允许服务商应用获取本机手机号码,并通过运营商网络上传,即可完成用户身份校验。不需要频繁的输入密码和手机验证码,很大程度上降低了注册、登录环节的用户流失。
推荐阅读
服务器标配 SSH 协议,你了解多少?的更多相关文章
- CentOS下搭建Git服务器(基于SSH协议)
1,安装Git所需依赖包 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # ...
- Git服务器、http协议及XCode
本来费了老鼻子牛劲搭好了SVN,可以通过web进行访问,也弄好了eclipse和XCode,结果几个开发的同事说要上git,悲了个催,又开始折腾git. 因为公司只有一个公网的http出口,因此开始了 ...
- Git : SSH 协议服务器
SSH 协议用于为 Git 提供远程读写操作,是远程写操作的标准服务. SSH协议语法格式 对于拥有 shell 登录权限的用户账号,可以用下面的语法访问 Git 版本库: 语法 1 : ssh:// ...
- Mac下使用终端连接远程使用ssh协议的git服务器
最近换了台新电脑, MacBook pro,拿到新电脑之后小小心喜了一下(终于解脱windows的束缚拥抱mac啦), 然后就开始苦逼的安装各种开发环境了. 之前在windows上使用tortoise ...
- Findout之为什么公司内部不能使用SSH协议连接外网服务器
今天在公司学习Linux的过程中,想试着像在Windows中操作Github一样对代码进行克隆,只不过是使用命令行的方式.根据一篇博文(Linux下初次使用Github配置)进行了配置,当我进行到第二 ...
- TortoiseSVN使用svn+ssh协议连接服务器时重复提示输入密码
当使用svn+ssh协议连接svn服务器时,ssh会提示请求认证,由于不是svn客户端程序来完成ssh的认证,所以不会缓存密码. 而svn客户端通常会建立多个版本库的连接,当密码没有缓存的时候,就会重 ...
- paramiko:实现ssh协议,对linux服务器资源的访问
介绍 网络传输是遵循协议的,比如SSH,paramiko则是实现了SSHv2协议的一个python库(底层使用的是cryptography).有了paramiko之后,我们便可以通过python使用s ...
- 何为SSH协议?
该文来自百度百科,自我收藏. SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH ...
- 【Jsch】使用SSH协议连接到远程Shell执行脚本
如果大家熟悉Linux的话,一定对ssh,sftp,scp等命令非常熟悉,ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接,SSH 在连接和传送的过程中会加密所有的数据. 但是SSH一般 ...
随机推荐
- Java学习之Swing Gui编程
Java学习之Swing Gui编程 0x00 前言 前面的使用的Gui是基于Awt 去进行实现,但是在现实写Gui中 AWT实际运用会比较少. 0x01 Swing 概述 AWT 和Swing 区别 ...
- Guitar Pro 7 中文界面的介绍
用过Guitar Pro这款软件的小伙伴们都知道,Guitar Pro这款吉他软件因为是国外开发商研发的,所以软件最初都是英文版本,对于国内的的吉他爱好者来说,在软件使用上还是很不方便的.随着Guit ...
- 如何将IDM中的进程设置进行备份
有时候我们想用浏览器自带的下载管理器进行下载,但是一点下载却被IDM(Internet Download Manager)自动嗅探捕获并下载,还有人因为重装系统使得之前更改IDM的设置都失效,只得重新 ...
- Java —— for while do...while循环(1)
//for循环 for(初始化语句 ;循环条件; 迭代语句){ 循环体; } //while循环 初始化语句; while(循环条件){ 循环体; 迭代语句; } //do...while循环 初始化 ...
- 【mq读书笔记】mq事务消息
关于mq食物以什么样的方式解决了什么样的问题可以参考这里: https://www.jianshu.com/p/cc5c10221aa1 上文中示例基于mq版本较低较新的版本中TransactionL ...
- Android Studio下的简单网页解析
Android Studio下的简单网页解析 一.导入数据 导入前添加依赖 implementation 'org.jsoup:jsoup:1.11.3' 使用字符串导入 String html = ...
- 排序--QuickSort 快排
Quick の implementation 快排,就像它的名字一定,风一样的快.基本上算是最快的排序算法了.快排的基本思想是选择一个切分的元素.把这个元素排序了.所有这个元素左边的元素都小于这个元素 ...
- 三分法-洛谷P3382
wampserver没下下来,lcm莫比乌斯反演写挂了,splay树段错误, nobody ever knows writing bugs better than me 然后今晚要打cf,不如先写个三 ...
- python初次接触
1.python有什么用或者能做什么? 可以做网站(比如 YouTube.豆瓣),可以做图片处理,可以做科学计算,也可以爬虫,甚至于游戏,学好Python后不用担心没有用武之地,Google就大量的在 ...
- .NET Core/.NET 5.0 析构函数依然有效?
前言 最近看到小伙伴在.NET Core中用到了析构函数,不禁打一疑问,大部分情况下,即使在.NET Framework中都不会怎么用到析构函数,我想在.NET Core中是否还依然有效呢?随着时间推 ...