SSH ------ 简介
介绍
SSH是一种使用TCP的非对称加密与对称加密算法相结合的安全网络协议,用于计算机之间的加密登录(两方)和端口转发(三方)。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
用途 - 远程登录
密码登录
ssh user@remote -p port
user
是你在远程机器上的用户名,如果不指定的话默认为当前用户remote
是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名port
是 SSH Server 监听的端口,如果不指定的话就为默认值 22
在执行了 ssh
命令之后,远程机器会询问你的密码。在输入密码的时候,屏幕上不会显示明文密码,也不会显示 ******
,这样别人就不会看到你的密码长度了,按下回车即可登录
中间人攻击
SSH之所以能够保证安全,原因在于它采用了公钥加密。
整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将 登录密码 和 对称加密密钥 加密后,发送给远程主机。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录,然后双方使用相同的对称加密密钥通信。
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https(http+SSL=https)协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。
免密码登录
本地生成一个密钥对,把公钥放在远端机器 ~/.ssh/authorized_keys,具体流程如下:
- 客户端生成RSA公钥和私钥
- 客户端将自己的公钥存放到服务器
- 客户端请求连接服务器,服务器将一个随机字符串发送给客户端
- 客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
- 服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。
ssh -i 私钥位置 user@hostname -p port
用途 - 端口转发
ssh隧道大致可以分为3种,分别为本地端口转发,远程端口转发,动态端口转发。
本地端口转发
本地电脑作为应用客户端,也作为SSH client。数据流从本地应用客户端发起。
语法:
ssh -g -N -L -f [本地端口]:[远程IP]:[远程端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]
本地电脑作为SSH client,输入如下命令:
ssh -g -N -L -f 9999:192.168.100.100:80 root@www.test.com -p 22
上面的命令意思是,在本地起一个监听端口9999,访问本机电脑的 http://本地IP:9999 可以直接访问到远程机器的 http://192.168.100.100:80所在的web服务。
远程端口转发(内网穿透)
本地电脑作为应用服务器,也作为SSH client。数据流从远端应用客户端发起。
语法:
ssh -g -N -R -f [远程端口]:[目标机器IP]:[目标机器端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]
本地电脑作为SSH client,输入如下命令:
ssh -g -N -R -f 5707:192.168.164.174:3081 root@120.46.199.14 -p 22
动态端口转发(支持SOCKS协议)
本地电脑作为应用客户端,也作为SSH client。数据流从本地应用客户端发起。
在本地起一个监听端口,往端口发送SOCKS协议的数据,会被转发到各个指定远端IP的端口上,即本地起了一个代理服务器。本地端口转发,只能转发到固定IP的端口上。
语法:
ssh -g -N -D -f [本地监听端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]
本地电脑作为SSH client,输入如下命令:
ssh -g -N -D -f 8888 root@120.46.199.14 -p 22
在使用代理的时候需要客户端手动设置代理服务器的IP和端口号,比如QQ、微信、浏览器都有相应的位置设置代理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2017-05-14 电影与英语