🌈个人首页: 神马都会亿点点的毛毛张
📌本篇博客分享的是基于局域网下的服务器连接🔗、文件传输以及内网穿透教程,内容非常完备✨,涵盖了在服务器上做深度学习的小伙伴的大部分日常需求的操作❗记得点赞✅、收藏✅加关注✅后再观看啦❗
文章目录
- 1.概述
- 2.服务器连接🔗
- 2.1 终端命令:ssh
- 2.1.1 概述
- 2.1.2 语法
- 2.1.3 使用
- ①默认端口
- ②指定端口
- ③免密登录设置
- 2.1.4 参数补充说明
- 2.2 VSCode软件
- 2.2.1 概述
- 2.2.1 下载与安装
- 2.2.2 远程连接🔗
- 方式1️⃣:自动配置
- 方式2️⃣:手动配置
- 2.2.3 更改远程服务器名称
- 2.3 XShell登录Linux服务器
- 2.3.1 概述
- 2.3.2 下载与安装
- 2.3.3 获取服务器基础信息
- 2.3.4 使用Xshell登录主机
- 方法1️⃣
- 方法2️⃣
- 2.3.5 额外补充
- 2.4 PyCharm
- 2.4.1 概述
- 2.4.2 获取服务器基础信息
- 2.4.3 配置步骤
- 1️⃣初次上传本地项目到服务器
- 2️⃣再次上传新的项目
- 3️⃣将服务器项目下载到本地
- 2.4.4 注意事项
- 2.5 总结
- 3.文件传输
- 3.1 概述
- 3.2 终端命令:`scp`
- 3.2.1 简介
- 3.2.2 语法
- 3.2.3 实战演示
- 3.2.4 总结
- 3.2 Xftp软件
- 3.2.1 概述
- 3.2.2 下载与安装
- 3.2.3 获取服务器基础信息
- 3.2.4 Xftp使用
- 3.2.5 总结
- 3.3 断点续传命令:`rsync`
- 3.4 总结
- 4.终端复用器
- 4.1 概述
- 4.2 tmux
- 4.2.1 概述
- 4.2.2 安装与启动
- ①安装
- ②启动与退出
- 4.2.3 快速入门
- ①前缀键
- ②会话操作
- ③窗口与窗格
- 4.2.4 更多介绍
- 4.3 程序后台运行多种实现
- 4.3.1 方式1:&符号
- 4.3.2 方式2:nohup命令
- 4.3.3 方式3:tmux命令
- 4.3.4 方式4:systemctl命令
- 4.3.5 总结
- 5.内网穿透
- 5.1 概述
- 5.1.1 为什么需要内网穿透?
- 5.1.2 内网穿透工具frp
- 5.2 配置步骤
- 5.2.1 frp下载
- ①如果服务器不能访问github
- ②服务器可以访问Github
- ③文件说明
- 5.2.2 服务端配置【公共网络服务器】
- 5.2.3 客户端配置【局域网服务器】
- 5.3 配置frpc后台运行及开机自启动:systemctl命令
- 5.3.1 简介
- 5.3.2 配置教程
- 5.4 相关问题
- 5.4.1 启动不了
- 5.4.2 服务端启动报错 Exec format error
- 🍎总结
- 参考文献
1.概述
- 🔖==本篇文章聚焦于局域网下的服务器之间的连接🔗、文件传输以及内网穿透操作。==
- 🌟==本篇围绕的情景就是用户在局域网下和服务器之间的操作,当然本篇文章介绍的内容不限于该场景。==
- ❗在讲解下面知识点的时候可能会涉及到一些Linux的基础命令,所以如果涉及到的不会的Linux命令可以跳转到毛毛张的这篇文章学习一下:Linux命令大全
- 📌本文下面的章节介绍的内容如下:
- 第2️⃣章介绍的是如何登录服务器,和借助相关软件运行程序、开发项目等
- 封面图片介绍的知识点在第3️⃣章,介绍的是如何将本地文件传输到服务器
- 第4️⃣章介绍的Linux服务器上一款靠用的终端管理软件
tmux
- 第5️⃣章介绍的是Linux服务器如何实现内网穿透
2.服务器连接🔗
- 下面介绍的接种服务器连接方式都是基于
SSH
协议(全称:Secure Shell
,安全外壳协议),是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议。几乎所有UNIX
平台—包括HP-UX、Linux、AIX、Solaris等等,都可运行SSH命令
- 毛毛张下面首先介绍其终端命令,然后介绍三种图形化界面工具连接服务器的步骤,
ssh
命令最常用的功能是登录远程主机,选择以什么用户连接哪台机器,然后输入密码即可,下面来看一下详细的功能吧❗
2.1 终端命令:ssh
2.1.1 概述
- SSH协议:是一种网络协议,用于远程访问和控制。提供加密的通信会话。确保数据传输的安全性。
- ssh命令:是用于操作系统命令行中的工具集。实现了SSH协议的功能。允许用户连接🔗到远程计算机💻。可以在远程计算机💻上执行命令和传输文件等操作。
- 使用情景:当需要通过网络安全地远程访问服务器时,可以使用SSH协议和ssh命令,一旦连接🔗成功,可以在远程服务器上执行命令,管理文件等操作,而所有的通信都是经过加密的,确保了数据的安全性。
- 通过ssh命令在终端输入连接🔗信息,如Linux的用户名和IP地址,即可连接🔗到远程服务器。
上面的内容可能介绍了一堆大家只需要了解就行,关键是如何使用ssh命令,下面毛毛张将详细介绍一下如何使用ssh命令远程连接🔗并控制服务器
2.1.2 语法
ssh
命令的基本格式如下:ssh [options] [-l username] [-p port] [username@]hostname
- 参数详解:
hostname
:要连接🔗的远程服务器的IP地址username
:要连接🔗的远程服务器的用户名-l
:指定连接远程服务器登录用户名,如果不指定,将使用本地登录用户名-p
:指定远程服务器上ssh
命令监听的端口号,如果不指定则默认端口号为22,如果不是则需要用该参数进行指定
2.1.3 使用
①默认端口
- 方式1:最简洁(推荐)
ssh flyvideo@192.168.1.100
- 方式2:通过
-l
参数指定用户名ssh -l flyvideo 192.168.1.100
- 方式3:如果用户名为当前登录用户,例如你本地电脑主机名和要登录的服务器的主机名相同,则可以省略用户名
ssh 192.168.1.100
②指定端口
- 方式1:
ssh
命令默认使用22号端口与远程服务器主机通信,如果需要使用其他端口,可以使用-p
参数指定ssh -p 2222 flyvideo@192.168.1.100
- 方式2:如果不想通过选项
-p
指定port
,可使用URI
格式ssh://[username@]hostname[:port]
来指定目标主机ssh ssh://flyvideo@192.168.1.100:2222
一般Linux服务器要放通22号端口; Windows服务器需要放通3389号端口
③免密登录设置
ssh
还支持使用密钥对进行登录,这种登录方式比密码🔑更加安全
步骤如下:
1.在本地电脑上面生成密钥对,使用如下命令,中间会要求你输入,直接一路回车
ssh-keygen -t rsa
2.查看并复制密钥,使用如下命令:(复制输出的全部内容)
type ~\.ssh\id_rsa.pub
3.使用 SSH 登录到远程主机,使用如下命令:(此时需要密码)
ssh flyvideo@192.168.1.100
4.将上面复制的密钥写入到远程服务器主机的~/.ssh/authorized_keys
文件中,打开终端,使用如下命令:
echo "刚刚复制的密钥" >> ~/.ssh/authorized_keys
5.再次重新登录远程主机,便可不需要输入密码
ssh flyvideo@192.168.1.100
2.1.4 参数补充说明
ssh
命令更多的参数说明可以通过终端man ssh
命令来进行查看ssh
命令有很多参数,但是由于ssh
命令主要用于登录服务器主机,所以在上面只介绍了几个常见的参数,毛毛张在这个补充里面附上更详细的选项说明-1:强制只使用协议第一版 -2:强制只使用协议第二版 -4:强制只使用 IPv4 地址. -6:强制只使用 IPv6 地址 -A:允许转发认证代理的连接。可以在配置文件中对每个主机单独设定这个参数 -a:禁止转发认证代理的连接 -b BIND_ADDRESS:在拥有多个地址的本地机器上,指定连接的源地址 -C:压缩所有数据。压缩算法与 gzip(1) 使用的相同 -c {blowfish | 3des | des}:选择会话的密码算法。3des 是默认算法 -c CIPHER_SPEC:另外, 对于协议第二版,这里可以指定一组用逗号隔开、按优先顺序排列的加密算法 -D [BIND_ADDRESS:]PORT:指定一个本地主机动态的应用程序级的转发端口。工作原理是这样的,本地机器上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接,该连接就经过安全通道转发出去,根据应用程序的协议可以判断出远程主机将和哪里连接。目前支持 SOCKS4 和 SOCKS5 协议,而 ssh 将充当 SOCKS 服务器. 只有 root 才能转发特权端口。可以在配置文件中指定动态端口的转发 -e ESCAPE_CHAR:设置 pty 会话的转义字符,默认为字符 ~。转义字符只在行首有效,转义字符后面跟一个点表示结束连接,后跟一个 control-Z 表示挂起连接,跟转义字符自己表示输出转义字符自身。把转义字符设为 none 则禁止 转义功能,使会话完全透明 -F CONFIGFILE:指定 ssh 指令的配置文件,将忽略系统级配置文件 /etc/ssh/ssh_config 和用户级配置文件 ~/.ssh/config -f:ssh 在执行命令前退至后台 -g:允许远端主机连接本地的转发端口 -I SMARTCARD_DEVICE:指定智能卡设备。智能卡里面存储了用户的 RSA 私钥 -i IDENTITY_FILE:指定一个 RSA 或 DSA 认证所需的身份(私钥)文件。协议第一版的默认文件是 ~/.ssh/identity 以及协议第二版的 ~/.ssh/id_rsa 和 ~/.ssh/id_dsa 文件。可以同时使用多个 -i 选项,也可以在配置文件中指定多个身份文件 -K:启用基于 GSSAPI 的身份验证和向服务器转发 GSSAPI 凭据 -k:禁用向服务器转发 GSSAPI 凭据 -L [BIND_ADDRESS:]PORT:HOST:HOSTPORT:将本地主机的地址和端口接收到的数据通过安全通道转发给远程主机的地址和端口 -l LOGIN_NAME:指定登录远程主机的用户。可以在配置文件中对每个主机单独设定这个参数 -M:将 ssh 客户端置于主模式进行连接共享。多个 -M 选项将 ssh 置于主模式,并在接受从连接之前进行确认 -m MAC_SPEC:对于协议第二版,可以指定一组用逗号隔开,按优先顺序排列的 MAC (message authentication code) 算法 -N:不执行远程命令,用于转发端口。仅限协议第二版 -n:把 stdin 重定向到 /dev/null,防止从 stdin 读取数据。在后台运行时一定会用到这个选项 -O CTL_CMD:控制主动连接多路复用主进程。参数 CTL_CMD 将被传递给主进程。CTL_CMD 可取值 check(检查主进程是否正在运行)和 exit(让主进程退出) -o OPTION:可以在这里给出某些选项,格式和配置文件中的格式一样。它用来设置那些没有单独的命令行标志的选项 -p PORT:指定远程主机的端口。可以在配置文件中对每个主机单独设定这个参数 -q:安静模式。消除大多数的警告和诊断信息 -R [BIND_ADDRESS:]PORT:HOST:HOSTPORT:将远程主机上的地址和端口接收的数据通过安全通道转发给本地主机的地址和端口 -S CTL_PATH:指定用于连接共享的控制套接字的位置 -s:用于请求远程系统上的子系统调用。子系统是 SSH2 协议的一个特性,它有助于将 SSH 用作其他应用程序(如 sftp(1))的安全传输。子系统通过远程命令指定 -T:禁止分配伪终端 -t:强制分配伪终端。这可用于在远程计算机上执行基于屏幕的任意程序,例如菜单服务。多个 -t 选项强制分配终端, 即使没有本地终端 -V:显示版本信息并退出 -v:冗详模式。打印关于运行情况的调试信息。在调试连接、认证和配置问题时非常有用。多个 -v 选项能够增加冗详程度,最多三个 -W HOST:PORT:将客户端上的标准输入和输出通过安全通道转发给指定主机的端口 -w LOCAL_TUN[:REMOTE_TUN]:指定客户端和服务端之间转发的隧道设备 -X:允许 X11 转发,可以在配置文件中对每个主机单独设定这个参数 -x:禁止 X11 转发 -Y:启用受信任的 X11 转发。受信任的 X11 转发不受 X11 安全扩展控制的约束 -y:使用 syslog(3) 系统模块发送日志信息。默认情况下,此信息被发送到 stderr
2.2 VSCode软件
2.2.1 概述
- Visual Studio Code (VSCode) 是由微软开发的一款开源代码编辑器,广泛应用于编程和开发任务。
- 由于它是开源的,拥有强大的扩展库,开发者通过Remote-SSH、Remote-Containers等扩展,可以在远程服务器或容器中进行开发。还支持与WSL(Windows Subsystem for Linux)集成,方便Windows用户在Linux环境中开发。
2.2.1 下载与安装
1.完整详细的下载安装教程可以参考毛毛张的这篇教程:VScode中配置 C/C++ 环境 | IT拯救者,毛毛张在这里就没有详细介绍
2.安装完成之后,打开VSCode,下面开始安装插件
3.打开扩展商店
4.搜索Remote - SSH,并点击安装(在搜索框输入ssh
即可出现),由于毛毛张已经安装过了,所以这里显示的是禁用,大家直接点击安装按钮即可
5.这个插件的安装还是比较简单的,没有太多需要介绍的,下面毛毛张开始介绍如何在安装好Remote - SSH
插件之后使用VSCode
连接服务器
2.2.2 远程连接🔗
方式1️⃣:自动配置
1.点击远程资源管理器
2.创建远程连接:点击SSH旁边的加号
3.输入:ssh 用户名@服务器IP地址
4.输入之后点击回车,会出现让你保存上面的ssh
连接信息到本地配置文件中,选择第一个,就是保存到当前用户的ssh
配置文件中
5.点击远程资源管理器界面右上角的刷新⟳,就会出现刚刚保存的远程连接服务器
6.右键点击刚才创建的远程连接🔗
7.这里选择Linux(一般服务器都是使用Linux系统)
8.然后输入你的密码🔑,回车,第一次可能有点慢,请耐心等待
9.左下角是绿色的就表明连接🔗成功了
10.然后就可以开始选择你要打开的文件或者文件夹
方式2️⃣:手动配置
1.打开远程资源管理器,点击SSH旁边的设置⚙
2.选择你刚才保存的路径,即SSH配置文件路径,第一个是保存到当前用户的SSH配置路径
3.按如下图所示格式在文件中写入和服务器的相关配置
Host <显示的服务器名字>
HostName <服务器的ip>
User <ssh登录的用户名>
Port 22 # 如果是默认端口就是22,配置文件中不会出现;如果不是就需要通过该参数指定
示例:
Host mmz
HostName 10.123.123.123
User root
4.更改完之后,点击远程资源管理器界面右上角的刷新🔃,就会发现已经添加成功了
5.右键点击刚才创建的远程连接🔗
6.这里选择Linux(一般服务器都是使用Linux系统)
7.然后输入你的密码🔑,回车,第一次可能有点慢,请耐心等待
8.左下角是绿色的就表明连接🔗成功了
9.然后就可以开始选择你要打开的文件或者文件夹
2.2.3 更改远程服务器名称
1.打开远程资源管理器,点击SSH旁边的设置⚙
2.选择你刚才保存的路径,即SSH配置文件路径,第一个是保存到当前用户的SSH配置路径
3.保存之后打开该文件会发现里面的内容如下
Host <显示的服务器名字>
HostName <服务器的ip>
User <ssh登录的用户名>
Port 22 # 如果是默认端口就是22,配置文件中不会出现;如果不是就需要通过该参数指定
4.然后更改自己成自己熟悉的名称即可
5.更改完之后,点击远程资源管理器界面右上角的刷新🔃,就会发现已经改名成功
2.3 XShell登录Linux服务器
2.3.1 概述
- Xshell是一款功能强大的终端模拟软件,被用于连接🔗🔗和管理远程服务器的工具。它提供了SSH、Telnet、SFTP等多种协议支持,可以帮助用户通过命令行界面对远程服务器进行操作
- Xshell具有以下特点和功能:
- 多种协议支持:Xshell支持SSH、Telnet、SFTP等多种协议,可以连接🔗各种类型的服务器和网络设备。
- 多窗口管理:Xshell支持同时连接🔗多个远程会话,并提供可调整大小和分割的窗口,实现对多个端口的同时操作和管理。
- 自动登录和脚本支持:Xshell支持自动登录功能,可以保存登录信息,节省登录时间。同时还支持脚本功能,可以通过编写脚本实现批量操作和自动化任务。
- 安全功能:Xshell提供了SSH协议支持,可以实现加密通信,保障远程操作的安全性。此外,还支持多种身份验证方式,如密码🔑、公钥、证书等,提高了安全性和可靠性。
- 高级终端模拟功能:Xshell提供了很多高级的终端模拟功能,如颜色主题、背景图片、字体设置等,可以根据个人喜好进行设置。
- 总之,Xshell是一款功能强大、易于使用的终端模拟软件,适用于连接🔗和管理各种远程服务器和网络设备,下面毛毛张就来介绍如何使用XShell连接🔗服务器!
2.3.2 下载与安装
1.去官网下载免费版本,下载安装的时候选择 “home/school” 则为免费版本,这里是下载官网:家庭/学校免费,下载界面如下
🌳Xshell的安装步骤比较简单,但是为了完整性毛毛张在这里还是介绍它的安装步骤,对安装比较熟的人可以跳过🛫
2.鼠标双击下载的安装包Xshell-7.0.0157p.exe
3.在弹出的安装界面,点击下一步
4.勾选接受许可,点击下一步
5.更改安装路径,点击下一步
6.点击安装
7.等待安装
8.取消勾选运行Xshell,点击完成,安装完成!
9.返回桌面双击Xshell图标即可运行
10.新安装用户需要用邮箱进行注册和验证
2.3.3 获取服务器基础信息
- 今天毛毛张介绍的软件的命令,均涉及到与服务器进行连接🔗,并且连接🔗的底层都是使用的
ssh
协议,因此大家在继续下面的教程之前,有一些关于服务器的基础信息需要大家知道,毛毛张在这里列举了出来- Linux服务器用户名:可以通过
hostname
命令查看 - Linux服务器IP地址和端口号:可以通过
ifconfig
命令查看 - 端口号:远程
ssh
服务器监听的端口号默认是22,如果不是改成真实的端口号 - 服务器登录密码🔑:自己设置的或者师兄师姐告诉你的
- Linux服务器用户名:可以通过
2.3.4 使用Xshell登录主机
方法1️⃣
1.运行进入Xshell
2.点击新建,设置名称和填写Linux
主机IP
,远程ssh
服务器监听的端口号默认是22,如果不是改成真实的端口号
⚠注意:这里的设置名称不是Linux的用户名,就是起一个标记的作用,用来标识连接🔗的服务器
3.用户身份验证后点击确定,这里的用户名才是Linux的用户名
4.连接🔗服务器
5.如果你出现了下面这种界面,那么恭喜你已经连接🔗成功,你可以开始远程操控Linux服务器了。
6.如果你出现下面这样的警告,不要害怕,这里有两种解决方法
解决方法1
1.打开会话的属性界面
2.点击隧道,去掉转发X11连接到(X)的勾
3.确定退出后重新连接🔗就没有警告了
解决方法2
温馨提示:方法2需要用户会一点基本操作,不会的用方法1就可以了。
1.首先我们来到根目录下。
- 复制下面这行指令到命令行
vim /etc/ssh/sshd_config
2.进入sshd_config
后将 X11Forwarding no
改成 X11Forwarding yes
,再将UseLogin
的参数为no
可能这一行最开始是被注释,去掉注释,保存之后重启sshd
服务,重新连接🔗即可。
3.重启sshd服务,指令为
systemctl restart sshd
4.如果还是不行的话,需要检查 xorg-x11-xauth 的rpm包是否安装,未安装则进行下面操作进行安装
yum install -y xorg-x11-xauth
5.重新测试连接🔗,这次就没有警告了。
方法2️⃣
1.在 XShell 终端下敲(这里的ip就是主机的ip地址)
ssh [ip]
2.输入服务器的管理员账户(root),或者输入你获取的登录用户名
3.输入密码🔑(注意:这里的用户名密码🔑都是在最初购买服务器的时候设置的用户名密码🔑)
4.连接🔗成功
2.3.5 额外补充
- XShell 下的复制粘贴: ctrl + c / ctrl + v 是不行
- 复制:
ctrl + insert
(有些用户的 insert 需要配合 fn 来按) - 粘贴:
shift + insert
- 复制:
2.4 PyCharm
2.4.1 概述
- 只有使用
PyCharm专业版
才能通过ssh
来连接🔗服务器,所以大家需要首先安装专业版的PyCharm - 毛毛张在这里列举两种解决方案:
- 如果是在校生,可以去官网通过邮箱认证或者提交学信网的认证即可获取
PyCharm专业版
的软件 - 第二种就是用破解版,毛毛张在这里提供一个破解版的安装教程连接🔗:Pycharm 2023.1.2 专业版破解版安装教程
- 如果是在校生,可以去官网通过邮箱认证或者提交学信网的认证即可获取
- 具体的安装和破解步骤毛毛张就不在这里做详细的介绍了
2.4.2 获取服务器基础信息
- 今天毛毛张介绍的软件的命令,均涉及到与服务器进行连接🔗,并且连接🔗的底层都是使用的
ssh
协议,因此大家在继续下面的教程之前,有一些关于服务器的基础信息需要大家知道,毛毛张在这里列举了出来- Linux服务器用户名:可以通过
hostname
命令查看 - Linux服务器IP地址和端口号:可以通过
ifconfig
命令查看 - 端口号:远程
ssh
服务器监听的端口号默认是22,如果不是改成真实的端口号 - 服务器登录密码🔑:自己设置的或者师兄师姐告诉你的
- Linux服务器用户名:可以通过
2.4.3 配置步骤
1️⃣初次上传本地项目到服务器
1.创建自己电脑中的项目目录,下面是毛毛张的电脑中已经创建的要上传服务器的项目名:early_stopping
2.同时要在服务器上创建一个跟自己电脑项目名同名的文件夹,用来存放上传的项目early_stopping
$ mkdir early_stopping
3.配置PyCharm
:File
→Settings
→Project
→Python Interpreter
→Add Interpreter
→On SSH
3.先勾选New
,再配置服务器IP地址(Host)和用户名(Username),端口号默认是22,如果不是改成真实的端口号
4.填写服务器登录密码🔑,点击Next
5.出现Introspection completed
表示连接🔗成功,点击Next
6.勾选Existing
,表示选择服务器上已经创建好的虚拟环境,然后选择虚拟环境路径和服务器和本地项目映射到服务器上的项目路径
7.点击Interpreter
右边的📂图标,选择服务器上已经创建好的虚拟环境路径,一般创建好的虚拟环境是在anaconda
安装包下的envs/虚拟环境名/bin/
目录下
8.点击Sync folders
右边的📂图标,选择本地项目(Local Path
)映射到服务器上的项目路径(Remote Path
)
9.回到界面之后即可看见虚拟环境中已经安装好的包和库,先点击Apply
,然后点击OK
10.此时回到PyCharm
首页,即可看到已经变成远程服务器的虚拟环境
2️⃣再次上传新的项目
此时需要你用
PyCharm
已经打开本项目文件
- 如果下次再次上传新的项目:点击选项栏
Tools
→Deployment
→Configuration
- 在弹出的界面,点击
Mappings
,改成服务器上建立的和本地相同的项目名所在目录,然后点击OK
- 然后上传项目:鼠标右击项目→
Deployment
→Upload to 用户名@IP:端口号
4.选择虚拟环境:File
→Settings
→Project
→Python Interpreter
→Add Interpreter
,这一步和初次上传本地项目到服务器的步骤3操作相同,就不再多介绍了
3️⃣将服务器项目下载到本地
-
首先在本地创建和服务器同名的文件夹
-
点击选项栏
Tools
→Deployment
→Configuration
-
配置服务器项目路径到本地文件路径的映射,在弹出的界面点击
Mappings
,改成服务器上建立的和本地相同的项目名所在目录,然后点击OK
-
从服务器下载项目:鼠标右击项目→
Deployment
→Download from ...
5.选择虚拟环境:File
→Settings
→Project
→Python Interpreter
→Add Interpreter
,这一步和初次上传本地项目到服务器的步骤3操作相同,就不再多介绍了
2.4.4 注意事项
- ⚠项目代码中不能用绝对路径,要使用相对路径,因为自己电脑中的绝对路径只适用于自己电脑,不适用于服务器路径
2.5 总结
- 上面毛毛张介绍了4️⃣种连接服务器的方式,大家根据自己的实际需求进行选择
ssh
命令和Xshell
工具🧰适合在命令行种进行一些简单的操作VSCode
和PyCharm
两款图形化界面工具🧰适合进行和服务器连接进行代码开发
- 毛毛张主要是使用
VSCode
来连接服务器,通过它连接服务器进行项目开发比较方便,大家可以根据个人的习惯进行选择
3.文件传输
3.1 概述
- 🏫场景设定: 当你由于本地文件过多,想将下面一个文件传到服务器上进行存储的时候,你该怎么做呢?或者有一天你发现你登录的服务器上有这样一张图片,你想下载到自己的电脑上细细观赏的时候,你又需要怎么做呢?
- 下面👇毛毛张将介绍两种和服务器传输文件的方式
- 第1️⃣种是通过命令行的方式,使用终端命令
scp
,同时介绍一下如何进行断点续传 - 第2️⃣种就是通过一款免费的图形化界面工具
Xftp
- 第1️⃣种是通过命令行的方式,使用终端命令
3.2 终端命令:scp
3.2.1 简介
scp
是secure copy
的缩写,它是通过SSH
协议安全地将文件复制到远程系统或者从远程系统复制文件到本地的命令,使用SSH
意味着它享有与SSH
相同级别的数据加密,因此被认为是跨两个远程主机传输文件的安全方式。rcp
是不加密的,所以scp
是rcp
的加强版。(正确的废话,大家了解就行)
3.2.2 语法
- 完整写法:
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file_source [...] [[user@]host2:]file_target
- 简易写法:
scp [可选参数] 源文件路径 目的地路径
- 参数说明: 毛毛张在这里只介绍最常见和常用的参数,具体的更多参数大家可以通过
man
命令来查看和学习-r
: 递归复制整个目录-P port
:port
是指定数据传输用到的端口号,注意是大写的P- 如果默认SSH端口不是22,则使用此选项指定SSH端口
-C
:在复制过程中压缩文件或目录-p
:保留文件的访问和修改时间
3.2.3 实战演示
-
🏠现在有如下已知基础信息:
名称 路径 服务器用户名 flyvideo
远程服务器IP 10.193.193.211
远程服务器端口号 ssh
协议默认端口号22
远程服务器登录密码🔑 5201314
远程服务器文件夹所在路径 /home/flyvideo/mySata/plxjj
远程服务器文件所在路径 /home/flyvideo/mySata/plxjj/plxjj.png
本地服务器文件夹所在路径 D:\test\plxjj
本地服务器文件所在路径 D:\test\plxjj\plxjj.png
-
在介绍如何使用之前先介绍两个Linux基础命令:
hostname
:查看Linux服务器用户名ifconfig
:查看Linux服务器IP地址
-
使用策略: 5️⃣步走,本质是要搞清楚从谁复制数据到谁那里去
- 远程服务器IP地址:通过ifconfig查看
- 服务器用户名:通过hosname查看
- 传送文件还是文件夹
- 源路径
- 目的地路径
-
⚠以下命令在命令行输入之后,回车后还需要输入远程服务器的登录密码🔑
-
🏠场景1️⃣: 将本地服务器(笔记本)文件推送到远程服务器文件夹下
- 远程服务器IP地址:
10.193.193.211
- 服务器用户名:
flyvideo
- 传送文件还是文件夹:文件,因此不需要
-r
参数 - 源路径:本地文件路径
D:\test\plxjj\plxjj.png
- 目的地路径:服务器文件夹
/home/flyvideo/mySata/plxjj
# 将本地服务器(笔记本)文件推送到远程服务器文件夹下 # 默认端口 scp D:\test\plxjj\plxjj.png flyvideo@10.193.193.211:/home/flyvideo/mySata/plxjj # 指定端口: 2222 ip为:47.99.123.66 scp -P 2222 D:\test\plxjj\plxjj.png flyvideo@47.99.123.66:/home/flyvideo/mySata/plxjj
- 远程服务器IP地址:
-
🏠场景2️⃣: 将本地服务器(笔记本)文件夹推送到远程服务器文件夹下
- 远程服务器IP地址:
10.193.193.211
- 传送文件还是文件夹:文件夹,需要
-r
参数 - 源路径:本地文件夹路径
D:\test\plxjj
- 目的地路径:服务器文件夹
/home/username/mySata/plxjj
# 将本地服务器(笔记本)文件夹推送到远程服务器文件夹下 # 默认端口 scp -r D:\test\plxjj flyvideo@10.193.193.211:/home/username/mySata/plxjj # 指定端口: 2222 ip为:47.99.123.66 scp -P 2222 -r D:\test\plxjj flyvideo@47.99.123.66:/home/username/mySata/plxjj
- 远程服务器IP地址:
-
🏠场景3️⃣:将远程服务器文件拷贝到本地服务器(笔记本)文件夹下
- 远程服务器IP地址:
10.193.193.211
- 传送文件还是文件夹:文件,因此不需要
-r
参数 - 源路径:服务器文件夹
/home/flyvideo/mySata/plxjj/plxjj.png
- 目的地路径:本地文件路径
D:\test\plxjj
# 将远程服务器文件拷贝到本地服务器(笔记本)文件夹下 # 默认端口 scp flyvideo@10.193.193.211:/home/flyvideo/mySata/plxjj/plxjj.png D:\test\plxjj\ # 指定端口: 2222 ip为:47.99.123.66 scp -P 2222 flyvideo@10.193.193.211:/home/flyvideo/mySata/plxjj/plxjj.png D:\test\plxjj\
- 远程服务器IP地址:
-
🏠场景4️⃣: 将远程服务器文件夹拷贝到本地服务器(笔记本)文件夹下
- 远程服务器IP地址:
10.193.193.211
- 传送文件还是文件夹:文件夹,需要
-r
参数 - 源路径:服务器文件夹
/home/flyvideo/mySata/plxjj/
- 目的地路径:本地文件路径
D:\test\plxjj
# 将远程服务器文件拷贝到本地服务器(笔记本)文件夹下 # 默认端口 scp -r flyvideo@10.193.193.211:/home/flyvideo/mySata/plxjj D:\test\plxjj\ # 指定端口: 2222 ip为:47.99.123.66 scp -P 2222 -r flyvideo@10.193.193.211:/home/flyvideo/mySata/plxjj D:\test\plxjj\
- 远程服务器IP地址:
3.2.4 总结
- 🌳
scp
命令的四种使用场景总结:1️⃣将本地文件拷贝到远程目录下:scp 本地文件路径 用户名@计算机IP:远程目录路径 2️⃣将远程文件拷贝到本地目录下:scp 用户名@计算机IP:文件路径 本地目录路径 3️⃣将本地文件夹拷贝到远程目录下:scp -r 本地文件夹路径 用户名@计算机IP:远程目录路径 4️⃣将远程文件夹拷贝到本地目录下:scp -r 用户名@计算机IP:远程目录路径 本地目录路径
- 🍎经验总结:上面毛毛张虽然细分了四种情况,但是无论是传输文件还是文件夹均可以加上
-r
参数,因此可以对上面的情况进行简化成两种1️⃣将本地文件/文件夹拷贝到远程目录下:scp -r 本地文件/文件夹路径 用户名@计算机IP:远程目录路径 2️⃣将远程文件/文件夹拷贝到本地目录下:scp -r 用户名@计算机IP:远程文件/文件夹路径 本地目录路径
- 如果远程服务器使用的不是默认端口,就需要通过
-P
选项来指定端口1️⃣将本地文件/文件夹拷贝到远程目录下:scp -P 端口号 -r 本地文件/文件夹路径 用户名@计算机IP:远程目录路径 2️⃣将远程文件/文件夹拷贝到本地目录下:scp -P 端口号 -r 用户名@计算机IP:远程文件/文件夹路径 本地目录路径
- 🔖注意:如果是内网穿透之后使用这个命令进行传输会很慢,因此使用
scp
命令在进行传输的时候最好知道服务器的真实IP,但是这要求我们在同一个局域网内
3.2 Xftp软件
3.2.1 概述
XFTP
是一个功能强大的SFTP、FTP 文件传输软件。它使得Windows 用户能安全地在 UNIX/Linux系统和Windows系统之间传输文件。XFTP
能同时适应初级用户和高级用户的需要。它采用了标准的Windows风格的向导,它简单的界面能与其他 Windows 应用程序紧密地协同工作,此外它还为高级用户提供了众多强劲的功能特性。- 📌总的来说,它是一款方便用户在Linux系统和Windows之间传输文件的✨图形化界面操作🌟工具
3.2.2 下载与安装
- 下载地址:https://www.xshell.com/zh/free-for-home-school/
- 安装过程比较简单,整个安装过程可以参考[
XShell
的安装教程](# 2.3.3 安装Xshell ),毛毛张在这里就不细说了,下面直接介绍它的使用
3.2.3 获取服务器基础信息
- 今天毛毛张介绍的软件的命令,均涉及到与服务器进行连接🔗,并且连接🔗的底层都是使用的
ssh
协议,因此大家在继续下面的教程之前,有一些关于服务器的基础信息需要大家知道,毛毛张在这里列举了出来- Linux服务器用户名:可以通过
hostname
命令查看 - Linux服务器IP地址和端口号:可以通过
ifconfig
命令查看 - 端口号:远程
ssh
服务器监听的端口号默认是22,如果不是改成真实的端口号 - 服务器登录密码🔑:自己设置的或者师兄师姐告诉你的
- Linux服务器用户名:可以通过
3.2.4 Xftp使用
1.双击安装好的Xftp
软件
2.打开的界面如下
3.按照下图所示步骤进行连接🔗
4.第一次连接🔗会弹出如下警告,选择接受并保存,下次就可以直接连接🔗
5.连接🔗成功后的界面如下,左边方框为本地文件磁盘的文件,右边区域为服务器磁盘的文件
6.此时就可以随意将本机上的文件上传到虚拟机上,直接拖动就可以实现左边为本地文件目录,右边为服务器的文件目录
3.2.5 总结
- 整个
Xftp
的软件使用比较简单,它常常配合Xshell
来一起使用,适用于喜欢图形化界面工具的人
3.3 断点续传命令:rsync
-
🔥在
Linux
系统上传⬆️与下载文件⬇️的时候,由于网络原因很容易断开💔或者是大文件传输的情况下,如何在断开后继续传输不用重新开始💫,对开发及运维人员而言,是非常有意义❗的 -
由于篇幅📃的原因毛毛张只在这里提出这个问题和一种解决方案,就不具体的说怎么操作了,相信经过前面对于
scp
命令的学习,毛毛张只在这里提供几个参考性的教程,大家可以通过这几个教程自行学习一下rsync
命令 -
参考教程:
- linux scp 断点续传 rsync 命令简介
- 【linux命令讲解大全】130.rsync:快速远程数据同步工具
- linux rsync命令(rsync指令)(Remote Sync)(文件同步)
- 【Linux】【上传下载】Linux系统下命令行中的断点续传方法
- rsync命令详解
3.4 总结
- 毛毛张在上面重要详细介绍了一下在本地笔记本和服务器之间传输文件的两种方式
- 如果喜欢命令行的小伙伴可以选择使用
scp
命令 - 如果喜欢图形化界面工具的小伙伴可以使用
Xftp
软件
- 如果喜欢命令行的小伙伴可以选择使用
4.终端复用器
4.1 概述
-
背景介绍:
-
在使用Linux默认终端时比较纠结的是一个终端通常同一时间只能做一件事,虽然可以将任务放入后台,但是对于有输出或交互的任务放入后台并不是一个好的选择。
-
另一个比较纠结的问题是任务无法脱离终端运行,如果使用基础的命令使其脱离后台运行,下次就没法在终端中交互管理该任务了。
-
对于上面这些问题一般使用screen和tmux等终端复用与管理工具来处理。
-
-
使用场景: 很多新手经常碰到的问题就是按照网上的教程组了个服务器,然后安装运行了某些服务器软件,比如网站服务器、游戏服务器这些,然后退出终端后服务器就不工作了。使用screen和tmux这些工具就能很好的解决这个问题。screen和tmux这类工具的出现给linux服务器的使用带来了很大的便利,借助这些工具你可以让所有工作都在前台跑着,或者随意换电脑登陆继续之前的工作。
-
tmux
基础功能和screen
差不多,但是目前来说tmux
总体上比screen
更加好用些。所以毛毛张在这里就只介绍tmux
这款终端复用器
4.2 tmux
4.2.1 概述
4.2.2 安装与启动
①安装
tmux
的安装比较简单,只需要在Linux系统中使用如下面命令安装即可快速安装# Ubuntu 或 Debian 系统 sudo apt-get install tmux # CentOS 或 Fedora sudo yum install tmux
②启动与退出
- 启动
tmux
窗口:安装完成后,打开终端,在终端输入tmux
命令,就进入了tmux
窗口tmux
上面命令会启动 Tmux 窗口,底部有一个状态栏。状态栏的左侧是窗口会话信息(编号和名称),右侧是系统信息。
-
退出
tmux
窗口:按下Ctrl+d
或者在tmux
窗口输入exit
命令,就可以退出tmux
窗口exit
这个命令仅仅只是退出了
tmux
终端,但是这个创建的这个tmux
窗口会话并没有被结束,如何彻底结束tmux窗口会话的运行呢?请看下面的讲解!
4.2.3 快速入门
①前缀键
tmux
窗口有大量的快捷键,但是所有快捷键都要通过前缀键唤起,默认的前缀键是Ctrl+b
,即先按下Ctrl+b
,然后全部松掉,再去按快捷键才会生效- 实例:查看
tmux
帮助的快捷键是?
,但是要先按下Ctrl+b
,然后全部抬起,再按下?
键才会生效显示帮助信息,再按下ESC
键或q
键,就可以退出帮助
- 实例:查看
- 因此,在后前面的介绍中,
Ctrl+b
?
就表示先按下前缀键Ctrl+b
,然后松开,再按下快捷键?
键
②会话操作
创建新会话:
方式1:创建默认会话并进入(不推荐)
语法:
tmux
打开一个
tmux
窗口就对应着一个会话,上面这种方式,第一个启动的tmux
窗口编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话就是:0号会话、1号会话,但是使用编号区分会话,不太直观,更好的方法是为会话起名。
所有下面介绍一下第2种比较推荐的方式
方式2:创建一个指定名称的会话并进入(推荐)
语法:
tmux new -s session_name
退出会话
方式1:直接在tmux
创建的会话中按下快捷键Ctrl + d
,即可退出当前会话,不需要按前缀键
方式2:在tmux
创建的会话中按下前缀键Ctrl + b
,松开后,再按按键 d
,即可退出当前会话
查看已创建的会话
方式1:终端命令
语法:
tmux ls
说明:使用改可以列出已创建的会话,还包括会话名称、会话含有的窗口数、创建时间等
方式2:快捷键(Ctrl + b
s
)
前提:需要已经在tmux
创建的会话中,这个功能比较厉害,还可以预览各个会话的内容,并选择切换,如下图
重新进入会话
方式1:在终端重新进入已经创建的会话
语法:使用会话名称重新进入已存在的会话
tmux a -t session_name
方式2:已经在tmux创建的会话中切换进其它会话
语法:
tmux switch -t session_name
说明:没有上面介绍的 Ctrl + b s
来的好用
重命名会话
语法:
tmux rename-session -t old_session_name new_session_name
关闭会话
注意:首先要退出要关闭的会话,快捷键Ctrl + d
语法:使用会话名称关闭已有会话
tmux kill-session -t session_name
实战演示:
注意:在tmux创建的会话中无法通过滚轮上下来查看历史信息,需要先按快捷键
ctrl + b PgUp
,接着就可以使用PgUp
PgDn
↑
↓
来查看历史信息了,按下q
退出
③窗口与窗格
①前面介绍的功能和语法,都是基于会话层面的操作,一个
tmux
会话对应一个窗口,但是实际上,一个tmux
会话可以有多个窗口,我们只需要在终端中通过tmux a -t session_name
命令就又可以打开一个改会话的另一个窗口②每个窗口又可以分割成多个窗格,对窗口和窗格相关操作都是在已经进入
tmux
会话的情况下进行的,下面就来详细介绍一下和窗口与窗格相关的操作
新建窗口
快捷键: Ctrl + b
和c
说明:多个窗口下底部带*
标记的为当前活动窗口
切换窗口
方式1:列出所有窗口,可以预览并选择切换
快捷键 :Ctrl + b
w
方式2:切换到指定会话号
快捷键:Ctrl + b
会话数字
示例:进入0会话:Ctrl + b
0
方式3:切换进入上一个窗口
快捷键:Ctrl + b
p
方式4:切换进入下一个窗口
快捷键:Ctrl + b
n
关闭窗口
快捷键1:Ctrl + b
&
说明:关闭当前窗口,会提示是否确认关闭,按下y
表示确认,即可关闭
快捷键2:Ctrl + d
关闭当前窗口,不需要确认
说明:如果有n个窗格则需要按n次,如果只有当前窗口只有一个窗格即可一键关闭
如果把前面的会话看做是一个excel文件的话,那窗口就像是其中的一张张sheet。接下来的窗格就开始魔幻了:
新建窗格
方式1:将当前窗口垂直分割
快捷键:Ctrl + b
%
方式2:将当前窗口水平分割
快捷键:Ctrl + b
"
切换窗格
方式1:向上切换窗格
快捷键:Ctrl + b
↑
、
方式2:向下切换窗格
快捷键:Ctrl + b
↓
方式3:向左切换窗格
快捷键:Ctrl + b
←
方式4:向右切换窗格
快捷键:Ctrl + b
→
调整窗格
方式1:依次切换窗格布局
快捷键:Ctrl + b
space
方式2:当前窗格与上一个窗格交换位置
快捷键:Ctrl + b
{
方式3:当前窗格与下一个窗格交换位置
快捷键:Ctrl + b
}
缩放窗格
快捷键:Ctrl + b
z
说明:当前窗格全屏显示,再使用一次会变回原来大小
拆分窗格
快捷键:Ctrl + b
!
说明:将当前窗格拆分为一个独立窗口
关闭窗格
快捷键1:Ctrl + b
x
说明:关闭当前窗格,会提示是否确认关闭,按下y
表示确认,即可关闭
快捷键2:Ctrl + d
关闭当前窗格,不需要确认
实例演示:
4.2.4 更多介绍
tmux
内容挺多的,毛毛张在这里介绍的只是一部分常用的功能,更多内容可以使用man tmux
命令查看或者跳转到链接:https://github.com/tmux/tmuxtmux
可以创建很多的会话、窗口、窗格,如果用的多的话在系统重启或崩溃的情况下一个个恢复就比较纠结了,针对这个情况甚至出了附加的工具来管理这些内容,可以参考该链接进行学习:https://tmuxp.git-pull.com/
4.3 程序后台运行多种实现
4.3.1 方式1:&符号
-
语法:
Command &
-
解释:如果想让程序在后台运行,在执行程序的时候,在命令的最后面加“&”符号
-
实例:用python运行test.py代码
# 待运行的文件test.py $ python test.py & # 查看程序是否在后台运行,同时查看改程序运行的PID号 $ ps -ef|grep test # 后台的程序需要关闭时,需要kill命令停止 # 通过上面命令查看程序运行的PID号 $ kill -9 进程号PID
注意:这种方法,除非程序自带的日志文件,否则无法查看程序运行的日志文件,不是很方便,不推荐
4.3.2 方式2:nohup命令
简介:
- nohup英文全称
no hang up
(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行 - nohup 命令,在默认情况下(非重定向时),会输出一个名叫
nohup.out
的文件到当前目录下,如果当前目录的nohup.out
文件不可写,输出重定向到 $HOME/nohup.out 文件中
语法:
nohup Command [ Arg … ] [ & ]
参数说明:
- Command:要执行的命令
- Arg:一些参数,可以指定输出文件
- &:让命令在后台执行,终端退出后命令仍旧执行
实例1: 在后台执行root
目录下的runoob.sh
脚本
执行命令:
nohup /root/runoob.sh &
说明:
1.在终端如果看到以下输出说明运行成功:
appending output to nohup.out
2.这时我们打开root
目录 可以看到生成了nohup.out
文件。
终止后台程序运行:
步骤:
1.首先使用以下命令查找到nohup
运行脚本的PID
,然后使用kill
命令来删除:
ps -aux | grep "runoob.sh"
或者
ps -def | grep "runoob.sh" # 双引号可带可不带
参数说明:
- a : 显示所有程序
- u : 以用户为主的格式来显示
- x : 显示所有程序,不区分终端机
2.找到PID
后,就可以使用kill PID
来删除。
kill -9 进程号PID
实例2: 后台执行root目录下的runoob.sh脚本,并将输出重定向输入到runoob.log文件中
# 待运行的文件runoob.sh
nohup /root/runoob.sh > runoob.log 2>&1 &
# 权限不足时加sudo
nohup sudo /root/runoob.sh > runoob.log 2>&1 &
参数说明:
- /root/runoob.sh:需要后台运行的程序
- >:将程序日志文件追加到文件中,将标准输出(
&1
)的内容写入到runoob.log
文件中 - runoob.log:运行的日志,或你的文件的输出内容,文件中将包含标准输出和标准错误的内容
- 2>&1:将标准错误(&2)重定向到标准输出(&1);由于标准输出已经被重定向到
runoob.log
文件中,所以标准错误也被重定向到 runoob.log 文件中 - 0 – stdin (standard input,标准输入)
- 1 – stdout (standard output,标准输出)
- 2 – stderr (standard error,标准错误输出)
&
是一个描述符,告诉shell这个重定向目标是一个文件描述符,而不是一个文件;如果1或2前不加&,会被当成一个普通文件- &:让命令在后台执行,终端退出后命令仍旧执行
这种方式可以让进程在后台运行,并输出日志,但是不方便手动停止进程,还需要用ps命令查看进程,再用kill命令进行查看
4.3.3 方式3:tmux命令
tmux
就是解决关闭终端后服务器窗口程序还在运行的问题,因此tmux
也可以实现程序在后台运行的逻辑,不仅如此,再次进入tmux
窗口之后还能查看程序运行的输出- 这种运行逻辑就相当于程序在后台运行,而且不用担心一不小心退出了终端就停止了程序的运行,如果退出之后可以使用
tmux a -t session_name
命令重新进入,比较方便 - 如果需要关闭该程序,可以重新进入会话终止程序运行,或者直接
kill
会话即可
这种方式相当于让进程在后台运行,并方便停止,关闭当前会话即可,但是不方便查看程序输出的日志
4.3.4 方式4:systemctl命令
- 这种方式将结合下面的内网穿透教程来一起介绍
4.3.5 总结
- 毛毛张在上面主要介绍了3种让程序在后台运行的方法,毛毛张自认为介绍的不是很清楚,但是大家只要学会照猫画虎就行,跟着毛毛张的提供的命令来改成自己要运行的命令
- 上面3种方法各有利弊,但是大家可以组合起来使用,比如在
tmux
窗口使用nohup
命令来运行程序,这样就能在程序运行过程中查看日志了
5.内网穿透
5.1 概述
5.1.1 为什么需要内网穿透?
- ⚠毛毛张为了能够详尽的把整个内网穿透说清楚讲明白,所以要对一些基础概念进行介绍,但是大家在观看过程中只要跟着毛毛张的介绍理解了就行,不懂的地方也不要去细究底层的原理,因为很多底层原理涉及到网络,毛毛张也不是很明白
- 💻什么是局域网?:简单理解成在局部位置才能访问的网络,校园网就是一个很常见的例子,只有在学校内部或者附近才能连接🔗上的网络
- 📍什么是IP地址?: 简单理解成每台电脑的身份证,就是我们平时看到的形如
10.193.195.97
的这样一串数字 - 局域网和外部互联网之间有一个防火墙🚪,把内部网络(内网)和外部网络(外网)隔开了,这个防火墙的好处是可以保护学校的网络免受外部攻击,但坏处是它也阻止了你从家里直接访问校园网
- 连接🔗局域网的设备之间可以轻松连接🔗,就像在同一个图书馆内的房间之间自由走动一样,因为它们共享同一个网络基础设施、IP地址分配系统和通信协议,因此当你的电脑连接🔗的是局域网的时候,就会被分配一个IP地址,而你的服务器连接🔗在局域网的时候也会被分配一个服务器的IP地址,这样你就可以通过服务器的IP地址连接🔗上服务器了
- 🏫**场景设定:**平时你在学校里通过局域网连接🔗着实验室的服务器,你的科研和项目代码都在服务器上,但是当你放暑假的时候,你的老板突然催你项目进度了,你心里虽然万马奔腾,但是你还是得干,但是我人在家中,不在局域网覆盖的范围内,家里连接🔗的网络和学校的网络并不共享同一个网络基础设施、IP地址分配系统和通信协议,因此你无法通过之前连接🔗服务器的IP地址来连接🔗服务器,这时你需要一个工具就是内网穿透工具。
- 😃前面铺垫了一大堆,简单来说就是:在局域网中的服务器由于没有没有公网IP,因此无法被局域网外部的客户端(你家中的电脑)直接访问,如果你需要访问,就需要进行内网穿透。
5.1.2 内网穿透工具frp
- 🚧内网穿透是一种IP地址映射,你需要将局域网服务器(客户端)地址映射到公共网络服务器(服务端)可访问的地址,因此你需要一台可以可以在公共网络上访问的服务器(后面简称服务端),然后将需要客户端和服务端进行绑定后实现,相当于客户端和服务端之间建立了一条隧道,然后访问服务端的请求会通过隧道转发给局域网的服务器(也就是客户端)
- ❗❗实现内网传统的必备工具:
- 一台可以通过公共网络访问的服务器
- 一个局域网服务器(客户端)和公共网络服务器(服务端)之间建立隧道的工具,也就是内网穿透工具
- ⚠一台可以通过公共网络访问的服务器是需要进行租赁的,所以毛毛张今天在这里主要将的不是租赁,而是给大家分享如何在已经租赁好的公网服务器和局域网服务器之间实现内网穿透。内网穿透的工具有很多,毛毛张本篇博客介绍的内网穿透工具是frp,它是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网(正确的废话,了解就行)
👏铺垫了这么久,终于可以进入正题介绍内网穿透工具frp的配置教程了!🛫
5.2 配置步骤
- 毛毛张介绍内网穿透工具frp配置教程使用的版本是旧版本:
V0.49.0
- 在最新版中配置配置文件的后缀名由
.ini
变成了.toml
,本套教程适用于旧版本版本的frp内网穿透工具 - 本篇教程专注的是客户端的配置教程【局域网服务器】,对于服务端【公共网络服务器】的配置步骤,毛毛张还没有真正的实操过
- ⚠毛毛张在配置过程中写了很多注释,
#
后面的文字均属于注释,粘贴在文件中或者命令行中是不影响程序的执行的,大家在自己配置的时候可以把这些注释删掉
5.2.1 frp下载
- 💻下载官网:https://github.com/fatedier/frp/releases
- 进入官网之后尽量选择和毛毛张一样的版本进行下载,或者低于毛毛张的版本进行下载
①如果服务器不能访问github
- 如果笔记本和服务器都不能访问Github进行下载,可以毛毛张下面👇提供的百度网盘连接🔗
- 百度网盘下载连接🔗:https://pan.baidu.com/s/1zox7c6ONbTfvQTjgDkMhhg?pwd=2024
- 可以在笔记本上下载并解压好上传到服务器上,服务端和客户端均需要上传,具体怎么将笔记本上的文件传输到服务器可以参见第二节的文件传输
scp
命令 - 毛毛张提供的已经是解压后的文件了,不需要再进行解压了。
②服务器可以访问Github
一般服务器都是Linux系统,如果服务器可以访问Github,下面的操作将在服务器的命令行中进行
# 1.在指定的文件夹下打开Linux的命令行窗口
# 毛毛张进入的服务器下自己的目录:/home/flyvideo/mySata/zzx/
flyvideo@flyvideo:~$ cd mySata/zzx/
# 2.下载
flyvideo@flyvideo:~/mySata/zzx$ wget https://github.com/fatedier/frp/releases/download/v0.49.0/frp_0.49.0_linux_amd64.tar.gz
# 3.解压
flyvideo@flyvideo:~/mySata/zzx$ tar -xvf frp_0.49.0_linux_amd64.tar.gz
👇具体步骤参照下图:
③文件说明
- 下载并解压之后,你先别急,我们来先看一下解压之后的文件夹里面的文件,对里面的文件有一个大致的了解
frpc
文件:客户端执行程序frpc.ini
文件:客户端简易配置文件frpc_full.ini
文件:客户端完整配置文件frps
文件:服务器执行程序frps.ini
文件:服务器简易配置文件frps_full.ini
文件:服务器完整配置文件LICENSE
文件:许可文件
- 通过观察会发现,文件名前缀frpc
的文件属于配置客户端(局域网服务器)的文件;前缀frps
的文件属于配置服务端(公共网络服务器)的文件
- 因此,配置客户端的时候只需要保存配置服务端的文件;配置服务端的时候只需要保存配置客户端的文件,当然都保存也是也可以的,在配置的过程中不做处理就行
5.2.2 服务端配置【公共网络服务器】
-
首先将之前下载并解压之后的文件夹移动到自己习惯的文件夹下,毛毛张移动到
/home/flyvideo/mySata/zzx
目录下,并重命名为frps
flyvideo@flyvideo:~/mySata/zzx$ ls # 查看解压之后的文件 ChatGLM3 dataset frp_0.49.0_linux_arm64 frp_0.49.0_linux_arm64.tar.gz oppo recbole RecSystem yolov9 zip flyvideo@flyvideo:~/mySata/zzx$ mv frp_0.49.0_linux_arm64 frp # mv命令指定的文件夹不存在,就是重命名的作用 flyvideo@flyvideo:~/mySata/zzx$ cd frp # 进入到重命名之后的文件下 flyvideo@flyvideo:~/mySata/zzx/frp$ ls # 查看有哪些文件 frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE
-
进入重命名之后的文件夹
/home/flyvideo/mymySata/zzx/frp
,然后修改frps.ini
文件。flyvideo@flyvideo:~/mySata/zzx$ cd frp # 切换到内网穿透工具目录 flyvideo@flyvideo:~/mySata/zzx/frp$ ls #查看目录下的文件 frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE flyvideo@flyvideo:~/mySata/zzx/frp$ vim frps.ini # 使用vim命令修改frps.ini文件
⚠进入
vim
编辑器之后,默认内容如上👆,键盘输入i
进入编辑模式,点击ESC
退出编辑模式,输入英文:
,即可进入底线模式,在英文:
后面输入wq
,即可保存退出
- 进入
vim
编辑器之后,把下面这段内容粘贴到frps.ini
文件中,服务端的配置比较简单,仅监听本机的7000
端口就行# frps.ini [common] # frp监听的端口,默认是7000,可以改成其他的 bind_port = 7000 # 服务端设置的连接🔗口令,请改成更复杂的 # 根据自己的需求决定是否设置,如果设置了旧要与客户端的token一致 # 毛毛张在这里为了简便就没有进行设置 # token = 5201314
毛毛张上面介绍的是一个简单的配置,但是是足够的
由于毛毛张没有钱去租赁服务器来进行演示,所以毛毛张这一步介绍一下在其他文章看到的一个详细的配置内容和介绍
# frps.ini [common] # frp监听的端口,默认是7000,可以改成其他的 bind_port = 7000 # 服务端设置的连接🔗口令,请改成更复杂的 # 根据自己的需求决定是否设置,如果设置了旧要与客户端的token一致 token = 5201314 # 服务端web页面的端口,如7500端口, # 在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为公网服务的IP)查看frp服务运行信息 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin enable_prometheus = true #代理HTTP主机 vhost_http_port = 10080 #代理HTTPs主机 vhost_https_port = 10443 # frp日志配置 log_file = /var/log/frps.log log_level = info log_max_days = 3
注意:
- 7000和7500这两个端口,如果非必要就不要改了,不要为难自己,这两个端口主要用于服务端连接🔗,以及可视化窗口访问,和后面服务访问链接的端口没关联,所以不要太在意
- 记得放开服务器80、8080、7000、7500这几个端口的访问权限,包括云服务安全组策略和服务器防火墙
token
和dashboard_pwd
建议改成自己的vhost_http_port
配置的端口和后面访问的端口有关,因此必须保证这个端口不能被占用
-
启动服务端执行程序命令
./frps -c ./frps.ini
# 首先进入到服务端内网穿透工具所在的目录 flyvideo@flyvideo:~/mySata/zzx$ cd frp # 切换到内网穿透工具目录 # 以简易配置启动服务端程序 flyvideo@flyvideo:~/mySata/zzx/frp$ ./frps -c ./frps.ini
-
如果看到屏幕输出这样一段内容,即表示运行正常,这就意味着服务端的管道已经接好,如果出现错误提示,请检查上面的步骤。
-
防火墙端口开放
# 添加监听端口 sudo firewall-cmd --permanent --add-port=7000/tcp # 添加管理后台端口 sudo firewall-cmd --permanent --add-port=7500/tcp sudo firewall-cmd --reload
⚠如果上述步骤没有问题,则说明frp的服务端配置成功了,也就意味着内网穿透你已经成功了一半👏,下面进入客户端的配置
5.2.3 客户端配置【局域网服务器】
⚠在配置客户端的时候,你需要知道服务端配置的IP地址和端口号,毛毛张在这里假设IP和端口号分别为:
48.96.196.55
和8888
⚠毛毛张在配置过程中写了很多注释,
#
后面的文字均属于注释,粘贴在文件中或者命令行中是不影响程序的执行的,大家在自己配置的时候可以把这些注释删掉
-
首先将之前下载并解压之后的文件夹移动到自己习惯的文件夹下,毛毛张移动到
~/mySata/zzx
目录下,并重命名为frp
flyvideo@flyvideo:~/mySata/zzx$ ls # 查看解压之后的文件 ChatGLM3 dataset frp_0.49.0_linux_arm64 frp_0.49.0_linux_arm64.tar.gz oppo recbole RecSystem yolov9 zip flyvideo@flyvideo:~/mySata/zzx$ mv frp_0.49.0_linux_arm64 frp # mv命令指定的文件夹不存在,就是重命名的作用 flyvideo@flyvideo:~/mySata/zzx$ cd frp # 进入到重命名之后的文件下 flyvideo@flyvideo:~/mySata/zzx/frp$ ls # 查看有哪些文件 frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE
-
进入重命名之后的文件夹
~/mySata/zzx/frp
,然后修改frpc.ini
文件。flyvideo@flyvideo:~/mySata/zzx$ cd frp # 切换到内网穿透工具目录 flyvideo@flyvideo:~/mySata/zzx/frp$ ls #查看目录下的文件 frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE flyvideo@flyvideo:~/mySata/zzx/frp$ vim frpc.ini # 使用vim命令修改frpc.ini文件
⚠进入
vim
编辑器之后,默认配置如上图👆,键盘输入i
进入编辑模式,点击ESC
退出编辑模式,输入英文冒号:
,即可进入底线模式,在英文冒号:
后面输入wq
,即可保存退出
- 进入
vim
编辑器之后,把下面这段内容粘贴到frpc.ini
文件中,并根据服务端的公网IP地址和端口位置修改serverAddr
和remotePort
,而localIP
和localPort
配置为本地需要暴露到公网的服务地址和端口,因此形成了一种映射关系。# frpc.ini [common] # 下面的值指定了中转服务器的地址和7000端口 # 设置启用 TLS 加密,以确保数据在网络上传输时的安全性和完整性 tls_enable = true # 远程服务端的公网ip地址 server_addr = 48.96.196.55 # 服务端侦听的端口,服务端默认监听7000端口,与frps.ini的bind_port一致 server_port = 7000 # token在服务器上设置的连接🔗口令,与frps.ini的token一致,如果没有设置可以注释掉 # token = 5201314 # 配置ssh服务 [ssh] # 设置协议类型为TCP type = tcp # 本地的ip地址,默认127.0.0.1 local_ip = 127.0.0.1 # 本地的端口,默认22 local_port = 22 # 表示在frp服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口 remote_port = 8888
- 客户端的配置文件配置好后,一定要先运行服务端程序,再执行
./frpc -c ./frpc.ini
命令就可以开始运行客户端执行程序了,具体步骤如下:# 首先进入到客户端内网穿透工具所在的目录 flyvideo@flyvideo:~/mySata/zzx$ cd frp # 切换到内网穿透工具目录 # 以简易配置启动客户端程序 flyvideo@flyvideo:~/mySata/zzx/frp$ ./frpc -c ./frpc.ini
🎇到这里,恭喜你,你基本成功了,剩下就是验证是否通了。
- 测试内网穿透是否成功,可以在笔记本上,打开命令行,使用映射的IP地址和端口号,通过
ssh -p 端口号 用户名@服务端IP
命令登录局域网服务器,如果能够登录成功,就说明内网穿透成功了❗# ssh -p remotePort 局域网服务器用户名@serverAddr # 具体到本案例就是: ssh -p 8888 flyvideo@48.96.196.55
👏如果能使用
ssh
命令登录到服务器就说明内网穿透已经成功了
5.3 配置frpc后台运行及开机自启动:systemctl命令
5.3.1 简介
- Linux管理服务有两种方式
service
和systemctl
,而systemd
是Linux系统最新的初始化系统(init),systemctl
是systemd
的一个命令行工具,用于管理systemd
服务,systemd
取代了initd
,成为内核加载完之后启动的第一个进程(PID为1),其他进程都是它的子进程,如下图所示
- 然而
service
命令一般只能启动、停止、重启和查看服务,systemctl
命令则更广,通过systemctl
命令,可以启动、停止、重启、查看、设置和管理系统中的各种服务和进程,包括系统初始化、进程管理、日志管理、网络管理等 systemd
是Linux内核加载完成后启动的第一个进程。它会首先加载其管理的各种服务。如果希望自定义的服务在开机后自动启动,需要将服务配置文件放在/usr/lib/systemd/system/
目录下。该目录存放的是系统级服务脚本,这些服务可以在开机后立即运行,而无需用户登录。
5.3.2 配置教程
1.如果Linux服务器上没有systemd
,则需要安装,使用如下命令进行安装(一般系统默认自带systemd
)
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd
2.编辑frpc.service
文件
vim /etc/systemd/system/frpc.service
# 如果权限不够,需要使用sudo提升权限
sudo vim /etc/systemd/system/frpc.service
3.写入内容,仅注释的地方可以修改,其它地方不要进行修改
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frpc -c /path/to/frpc.ini
[Install]
WantedBy = multi-user.target
4.使用systemd
命令管理frpc
# 启动frps
systemctl start frpc
# 停止frps
systemctl stop frpc
# 重启frps
systemctl restart frpc
# 查看frps状态
systemctl status frpc
5.配置frpc
开机自启
systemctl enable frpc
使用
systemd
控制frps
及配置开机自启流程同上
5.4 相关问题
5.4.1 启动不了
- 服务端和客户端程序启动不了的情况下,并且没有报错误,大概率是因为文件没有执行权限,可以通过一下命令给要执行的程序文件赋权限
# 赋值权限命令,777表示最高权限
chomd 777 文件名
5.4.2 服务端启动报错 Exec format error
- 报错:
/frpc: cannot execute binary file: Exec format error
- 原因: 这是下载错文件了,下载的FRP与操作系统处理器架构不匹配,需要重新下载正确的文件
- 可以使用
arch
、uname -a
等命令查看系统架构。
- 可以使用
🍎总结
内容到这里就结束了,相信大家只要跟着步骤走都是没有问题的,如果大家有解决不了的地方,欢迎大家评论区留言或者私信告诉我。如果感觉对自己有用的话,可以点个赞或关注鼓励一下博主,我会越做越好的,感谢各位。
参考文献
-
Linux使用systemd控制frps及配置开机自启
-
frp教程:linux下使用 systemd 管理 frps 及配置开机自启
-
frp服务器端程序frps自启动出错
-
Linux下如何设置frp/frpc开机自启
-
Linux下frp内网代理+systemd管理frp并设置开机自启frp服务
-
Frp内网穿透
-
frp实现内网穿透(超详细!)
-
frp实现内网穿透
-
搭建frp进行内网穿透
-
最简单的FRP内网穿透教程
-
ssh命令详解
-
https://juejin.cn/post/7042486792011907086
-
https://blog.csdn.net/liao3399084/article/details/135533781
-
https://blog.csdn.net/weixin_45213577/article/details/120464751
-
参考文献
-
https://blog.csdn.net/rockage/article/details/124575215
-
https://blog.csdn.net/piaoranyuji/article/details/109504074
-
Pycharm连接🔗服务器
-
xshell连接🔗服务器
-
程序后台运行多种方法总结
-
https://blog.csdn.net/savet/article/details/131683156
-
1
-
2
-
3
-
https://blog.csdn.net/lssffy/article/details/131455724
-
https://blog.csdn.net/qq_64042727/article/details/131348584
-
https://blog.csdn.net/savet/article/details/131683156
-
https://blog.csdn.net/qq_62464995/article/details/131029280
-
https://blog.csdn.net/K346K346/article/details/104616612?ops_request_misc=&request_id=&biz_id=102&utm_term=ssh命令详解&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-104616612.nonecase&spm=1018.2226.3001.4187
-
https://www.cnblogs.com/baby123/p/6477429.html
-
https://blog.csdn.net/qq_43912191/article/details/123214679
-
https://blog.csdn.net/Williamcsj/article/details/129078376