个体制作网站设计,泉州网站建设dreamnm,信阳做房产哪个网站好用,wordpress批量删除图片大家好#xff0c;我是半虹#xff0c;这篇文章我们介绍一下 SSH 1、简介
SSH 全称 Secure Shell#xff0c;本质上是建立在应用层之上的网络传输协议
通过加密和认证机制保证传输安全#xff0c;经常用于远程登录或者远程访问
除此之外#xff0c;SSH 也能完成端口转发…大家好我是半虹这篇文章我们介绍一下 SSH 1、简介
SSH 全称 Secure Shell本质上是建立在应用层之上的网络传输协议
通过加密和认证机制保证传输安全经常用于远程登录或者远程访问
除此之外SSH 也能完成端口转发、安全文件传输等一系列实用功能 SSH 协议的实现有很多目前应用最为广泛的莫过于 OpenSSH
这是很多 Linux 的默认实现一般来说系统都已经默认安装好
如果因为某些原因尚未安装那么你也可以通过以下命令安装嘞
apt install openssh-server openssh-clientOpenSSH 实际包括两部分分别是 ssh 服务端以及 ssh 客户端 之后可以通过以下命令检查应用的安装情况
ssh -V然后可以通过以下命令检查服务的开启情况
service sshd status # 最后的 d 代表 daemon意思是【守护进程】该进程由服务端管理# 开启服务service sshd start
# 关闭服务service sshd stop
# 重启服务service sshd restart如果你已经安装好 OpenSSH那么下面我们一起来看看 SSH 的一些典型应用
具体可分为三点下面三个小节逐一进行介绍
远程访问对应第二个小节端口转发对应第三个小节文件传输对应第四个小节 2、远程访问
远程访问是 ssh 的重要应用之一其允许本地主机访问并操作远程主机
通过本地的 ssh 客户端连接远程的 ssh 服务端之后就能在上面执行任务 为了保证安全客户端连接服务端时需要进行认证
认证方式常用的有两种分别是密码认证和密钥认证 密码认证简单来说就是通过账号密码认证后才能登录
这种方式使用起来比较简单只需要一条命令就可以其具体格式如下
ssh userip -p port# user代表服务端主机上需要登录的用户名如果为空那么默认为 本机用户名
# ip 代表服务端主机的地址
# port代表服务端主机上需要连接的端口号如果为空那么默认为 22执行命令后就会要求输入服务端对应该用户的密码若输入正确即可完成登录
这里需要注意的是这条命令是在客户端上执行同时要求服务端已开启服务才行 密钥认证也称免密登录同样也是通过上述命令进行连接但是却无需输入密码
这种方法自然也要凭证来证明连接者的身份只不过凭证由公私钥技术提前生成
具体配置步骤如下所示 本地客户端生成公钥和私钥对 ssh-keygen -t rsa # -t 表示使用的算法类型这里使用的是 rsa 非对称加密算法执行命令后要求输入相关信息例如密钥保存路径、私钥口令短语等等 若一路回车默认会在 ~/.ssh 下生成 id_rsa 私钥和 id_rsa.pub 公钥 本地客户端传输公钥给服务端 ssh-copy-id userip -p port执行命令后输入密码就能传公钥到远程 ~/.ssh/authorized_keys 目录 之后使用 ssh 登录时自动用密钥做验证无需再次输入密码 3、端口转发
所谓端口转发实际上就是将发送到一个端口上的数据转发到另一个端口
这在日常开发中也是一个十分常见的需求 端口转发通常可以分为三种分别是本地转发、远程转发、以及动态转发
这里所用到的命令还挺复杂不过别怕下面会进行详细的分析以及总结 本地转发指的是将发送到本地端口的请求转发到远程端口
通常用于远程端上存在有某个服务本地主机想进行访问命令格式如下
ssh 服务端用户服务端地址 -p 服务端端口 -L 绑定地址:绑定端口:目标地址:目标端口首先需要说明的是上述命令是由客户端执行这里其实是理解转发链路的关键之一
这个命令看起来还挺复杂的但其实我们可以拆分开来看分成两个部分
ssh 服务端用户服务端地址 -p 服务端端口-L 绑定地址:绑定端口:目标地址:目标端口
第一部分跟上一小节的远程访问一样先建立客户端与服务端连接的隧道
第二部分是本地转发的关键配置所在将绑定端口上的请求转到目标端口
绑定端口是指客户端上所绑定的端口【重点】目标端口是由服务端进行转发的目标【重点】
一句话概括本地转发的转发链路如下
客户端绑定的端口收到请求时通过隧道发送到服务端再由服务端转发到目标端口【重点】
|--------------| |--------------| |-----------|
| 客户端的地址 |-------| 服务端的地址 |-------| 目标地址 |
| 所绑定的端口 |-------| 服务端的端口 |-------| 目标端口 |
|--------------| |--------------| |-----------|隧道 转发实际怎么做本地转发呢这里举一个例子
一般来说云服务器只默认开放 22 端口但是假设现在 7777 端口运行着一个服务
如果本地要临时访问则需先修改防火墙比较麻烦这时候就可以配置个本地转发
ssh 云服务器用户云服务器地址 -p 22 -L 127.0.0.1:8888:127.0.0.1:7777# 以上命令在本地主机执行此时客户端是本地主机服务端是云服务器目标地址是 127.0.0.1也即云服务器 7777 端口
#
# 执行之后本地主机访问 127.0.0.1:8888 即可访问云服务器 7777 端口# 特别说明关于绑定地址的设置通常是 127.0.0.1 或 0.0.0.0
#
# 如果设置 127.0.0.1则只允许本机的连接设置为 0.0.0.0才会监听所有 IP 的连接
#
# 因为这里的绑定地址是在客户端即本地主机后续接收的请求也是来自本地主机所以设置为 127.0.0.1 就可以远程转发则是指将发送到远程端口的请求转发到本地端口这与本地转发的概念相反
通常用于本地端上存在着某个服务远程主机想进行访问命令格式如下
ssh 服务端用户服务端地址 -p 服务端端口 -R 绑定地址:绑定端口:目标地址:目标端口上述命令同样是由客户端负责执行这点首先要理解清楚
下面还是将该命令拆解成两个部分来分析
ssh 服务端用户服务端地址 -p 服务端端口-R 绑定地址:绑定端口:目标地址:目标端口
第一部分与本地转发是完全一模一样先建立客户端与服务端连接的隧道
第二部分是远程转发的关键配置所在这是与本地转发最大的不同
绑定端口是指服务端上所绑定的端口【重点】目标端口是由客户端进行转发的目标【重点】
一句话概括远程转发的转发链路如下
服务端绑定的端口收到请求时通过隧道发送到客户端再由客户端转发到目标端口【重点】
|--------------| |--------------| |-----------|
| 服务端的地址 |-------| 客户端的地址 |-------| 目标地址 |
| 所绑定的端口 |-------| 客户端的端口 |-------| 目标端口 |
|--------------| |--------------| |-----------|隧道 转发还是举一个例子来说明怎么配置远程转发这里有一个经典的场景
假设你需要在家里访问公司内网的服务器并且你现在有一台外网的服务器怎么办
很简单其实就是配置远程转发这也是我们说的做了个内网穿透
ssh 外网服务器用户外网服务器地址 -R 0.0.0.0.8888:127.0.0.1:22# 以上命令用内网服务器执行此时客户端是内网服务器服务端是外网服务器目标地址是 127.0.0.1也即内网服务器 22 端口
#
# 执行之后家里的电脑使用 ssh 连接外网服务器 8888 端口即可连接内网服务器 22 端口# 需要注意这里的绑定地址设置是 0.0.0.0
#
# 因为绑定的地址是服务端即外网服务器但后续接收的请求是来自家里电脑不是同一台主机所以需要设置为 0.0.0.0
#
# 这时还要修改服务端上的 ssh 配置文件 /etc/ssh/sshd_config加上 GatewayPorts yes并重启 sshd 服务后才能生效最后介绍动态转发动态转发可以理解成是特殊版的本地转发
通常用于本地主机想访问多个远程端服务或未知的远程端服务其命令格式如下
ssh 服务端用户服务端地址 -p 服务端端口 -D 绑定地址:绑定端口上述命令同样是在客户端执行也可分为两个部分
ssh 服务端用户服务端地址 -p 服务端端口-D 绑定地址:绑定端口
第一部分与本地转发和远程转发一致用于建立客户端与服务端之间的连接隧道
第二部分是转发规则的配置在这里只需配置绑定端口而无需配置目标端口
这里的绑定端口是指客户端上的端口这与本地转发一致【重要】
这里没目标端口则是因为转发目标由发起的请求所决定【重要】
一句话概括动态转发的转发链路如下
客户端绑定的端口收到请求时通过隧道发送到服务端再由服务端转发该请求
服务端转发的请求就是客户端收到的请求这样就能达到动态转发的效果啦
例如客户端收到的请求地址是 hostA: portA则由服务端转发到 hostA: portA
|--------------| |--------------|
| 客户端的地址 |-------| 服务端的地址 |------- 目标地址和目标端口
| 所绑定的端口 |-------| 服务端的端口 |------- 由发起的请求所决定
|--------------| |--------------| 隧道 转发写到这里不知道大家有没有觉得哪里很奇怪我们举个例子说
假设现在本地绑定端口收到请求 remoteHost:remotePort
然后这个请求通过隧道给服务端
最后再由服务端去转发这个请求 remoteHost:remotePort那么 remoteHost:remotePort 就能收到这些步骤都没有问题可问题是 本地主机怎么才能让绑定的端口收到请求 remoteHost:remotePort举个具体的例子来说
假如现在要访问百度行那么请求就是 百度地址:80但是这样请求就直接发出去了没有到绑定的地址和端口
如果想要到绑定端口也行那么就只能是 127.0.0.1:绑定端口这样就能通过隧道给服务端服务端再去做转发
服务端转发了什么呢由发起的请求决定 127.0.0.1:绑定端口实际上就发给了自己而且端口也是绑定的端口就是说吧很奇怪问题在哪呢
还是那个本地主机怎么才能让绑定的端口收到请求 remoteHost:remotePort
这时就需要我们先在本地主机上设置系统或应用代理
使得发送到本地主机上的请求能先发送到绑定的端口 127.0.0.1:绑定端口
然后再通过隧道发送给服务端并由服务端进行转发
举例来说如果要在 macOS 设置系统代理可参考官方文档 好了说了这么多终于介绍完了三种端口转发模式总结一下
模式命令本地转发ssh 服务端用户服务端地址 -p 服务端端口 -L 客户端绑定地址:客户端绑定端口:目标地址:目标端口远程转发ssh 服务端用户服务端地址 -p 服务端端口 -R 服务端绑定地址:服务端绑定端口:目标地址:目标端口动态转发ssh 服务端用户服务端地址 -p 服务端端口 -D 客户端绑定地址:客户端绑定端口
无论是哪一种方式都需要先建立起客户端与服务端的连接隧道
但是这种连接往往不够稳定所以推荐使用autossh来维护连接
autossh 会对连接进行监听如果发现连接断开就会自动重连
使用方法也很简单只要用 autossh 替换掉 ssh并加 -M 参数指定监听服务端口即可
autossh 服务端用户服务端地址 -p 服务端端口 -L/-R/-D ... -M 监听服务端口当然为了不用每次重连时都要输入密码可以设置下免密登录
这点就不用多说了上面已经有介绍过了 4、文件传输
最后我们介绍 ssh 的另一个应用场景安全文件传输
为了更方便地使用这里先推荐一个名为 scp 的工具全称 Secure Copy
这个工具利用 ssh 实现文件传输和身份认证用起来很方便
命令格式如下
scp source target # 表示从 source 传输到 target来举两个例子
本地主机上传文件到远程主机
scp 本地主机文件路径 远程主机用户远程主机地址:远程主机目标路径# e.g.
# scp /path/to/source user222.234.133.144:/path/to/target# 上述命令在 本地主机执行这里
# source 为 本地主机文件路径
# target 为 远程主机用户远程主机地址:远程主机目标路径# 如果上传的是目录那么需要加上 -r 参数
# 另外可以加上 -P port 参数指定远程主机端口本地主机从远程主机下载文件
scp 远程主机用户远程主机地址:远程主机文件路径 本地主机目标路径# e.g.
# scp user222.234.133.144:/path/to/source /path/to/target# 上述命令在本地主机执行这里
# source 为 远程主机用户远程主机地址:远程主机文件路径
# target 为 本地主机目标路径# 如果下载的是目录那么需要加上 -r 参数
# 另外可以加上 -P port 参数指定远程主机端口好啦本文到此结束感谢您的阅读
如果你觉得这篇文章有需要修改完善的地方欢迎在评论区留下你宝贵的意见或者建议
如果你觉得这篇文章还不错的话欢迎点赞、收藏、关注你的支持是对我最大的鼓励 (/ω)