


📌本篇博客分享的是基于局域网下的服务器连接🔗、文件传输以及内网穿透教程,内容非常完备✨,涵盖了在服务器上做深度学习的小伙伴的大部分日常需求的操作❗记得点赞✅、收藏✅加关注✅后再观看啦❗
tmuxSSH协议(全称:Secure Shell,安全外壳协议),是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris等等,都可运行SSH命令
ssh命令最常用的功能是登录远程主机,选择以什么用户连接哪台机器,然后输入密码即可,下面来看一下详细的功能吧❗上面的内容可能介绍了一堆大家只需要了解就行,关键是如何使用ssh命令,下面毛毛张将详细介绍一下如何使用ssh命令远程连接🔗并控制服务器
ssh命令的基本格式如下:ssh [options] [-l username] [-p port] [username@]hostname hostname:要连接🔗的远程服务器的IP地址username:要连接🔗的远程服务器的用户名-l:指定连接远程服务器登录用户名,如果不指定,将使用本地登录用户名-p:指定远程服务器上ssh命令监听的端口号,如果不指定则默认端口号为22,如果不是则需要用该参数进行指定ssh flyvideo@192.168.1.100 -l参数指定用户名ssh -l flyvideo 192.168.1.100 ssh 192.168.1.100 ssh命令默认使用22号端口与远程服务器主机通信,如果需要使用其他端口,可以使用 -p 参数指定ssh -p 2222 flyvideo@192.168.1.100 -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 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 1.完整详细的下载安装教程可以参考毛毛张的这篇教程:VScode中配置 C/C++ 环境 | IT拯救者,毛毛张在这里就没有详细介绍
2.安装完成之后,打开VSCode,下面开始安装插件
3.打开扩展商店

4.搜索Remote - SSH,并点击安装(在搜索框输入ssh即可出现),由于毛毛张已经安装过了,所以这里显示的是禁用,大家直接点击安装按钮即可

5.这个插件的安装还是比较简单的,没有太多需要介绍的,下面毛毛张开始介绍如何在安装好Remote - SSH插件之后使用VSCode连接服务器
1.点击远程资源管理器

2.创建远程连接:点击SSH旁边的加号

3.输入:ssh 用户名@服务器IP地址

4.输入之后点击回车,会出现让你保存上面的ssh连接信息到本地配置文件中,选择第一个,就是保存到当前用户的ssh配置文件中

5.点击远程资源管理器界面右上角的刷新⟳,就会出现刚刚保存的远程连接服务器


6.右键点击刚才创建的远程连接🔗

7.这里选择Linux(一般服务器都是使用Linux系统)

8.然后输入你的密码🔑,回车,第一次可能有点慢,请耐心等待

9.左下角是绿色的就表明连接🔗成功了

10.然后就可以开始选择你要打开的文件或者文件夹

1.打开远程资源管理器,点击SSH旁边的设置⚙

2.选择你刚才保存的路径,即SSH配置文件路径,第一个是保存到当前用户的SSH配置路径

3.按如下图所示格式在文件中写入和服务器的相关配置
Host <显示的服务器名字> HostName <服务器的ip> User Port 22 # 如果是默认端口就是22,配置文件中不会出现;如果不是就需要通过该参数指定 示例: Host mmz HostName 10.123.123.123 User root 
4.更改完之后,点击远程资源管理器界面右上角的刷新🔃,就会发现已经添加成功了

5.右键点击刚才创建的远程连接🔗

6.这里选择Linux(一般服务器都是使用Linux系统)

7.然后输入你的密码🔑,回车,第一次可能有点慢,请耐心等待

8.左下角是绿色的就表明连接🔗成功了

9.然后就可以开始选择你要打开的文件或者文件夹

1.打开远程资源管理器,点击SSH旁边的设置⚙

2.选择你刚才保存的路径,即SSH配置文件路径,第一个是保存到当前用户的SSH配置路径

3.保存之后打开该文件会发现里面的内容如下
Host <显示的服务器名字> HostName <服务器的ip> User Port 22 # 如果是默认端口就是22,配置文件中不会出现;如果不是就需要通过该参数指定 4.然后更改自己成自己熟悉的名称即可

5.更改完之后,点击远程资源管理器界面右上角的刷新🔃,就会发现已经改名成功

1.去官网下载免费版本,下载安装的时候选择 “home/school” 则为免费版本,这里是下载官网:家庭/学校免费,下载界面如下

🌳Xshell的安装步骤比较简单,但是为了完整性毛毛张在这里还是介绍它的安装步骤,对安装比较熟的人可以跳过🛫
2.鼠标双击下载的安装包Xshell-7.0.0157p.exe

3.在弹出的安装界面,点击下一步

4.勾选接受许可,点击下一步

5.更改安装路径,点击下一步

6.点击安装

7.等待安装

8.取消勾选运行Xshell,点击完成,安装完成!

9.返回桌面双击Xshell图标即可运行

10.新安装用户需要用邮箱进行注册和验证
ssh协议,因此大家在继续下面的教程之前,有一些关于服务器的基础信息需要大家知道,毛毛张在这里列举了出来 hostname命令查看ifconfig命令查看ssh服务器监听的端口号默认是22,如果不是改成真实的端口号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.重新测试连接🔗,这次就没有警告了。

1.在 XShell 终端下敲(这里的ip就是主机的ip地址)
ssh [ip] 
2.输入服务器的管理员账户(root),或者输入你获取的登录用户名

3.输入密码🔑(注意:这里的用户名密码🔑都是在最初购买服务器的时候设置的用户名密码🔑)

4.连接🔗成功

ctrl + insert (有些用户的 insert 需要配合 fn 来按)shift + insertPyCharm专业版才能通过ssh来连接🔗服务器,所以大家需要首先安装专业版的PyCharmPyCharm专业版的软件ssh协议,因此大家在继续下面的教程之前,有一些关于服务器的基础信息需要大家知道,毛毛张在这里列举了出来 hostname命令查看ifconfig命令查看ssh服务器监听的端口号默认是22,如果不是改成真实的端口号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首页,即可看到已经变成远程服务器的虚拟环境

此时需要你用
PyCharm已经打开本项目文件
Tools→Deployment→Configuration
Mappings,改成服务器上建立的和本地相同的项目名所在目录,然后点击OK
Deployment→Upload to 用户名@IP:端口号
4.选择虚拟环境:File→Settings→Project→Python Interpreter→Add Interpreter,这一步和初次上传本地项目到服务器的步骤3操作相同,就不再多介绍了
首先在本地创建和服务器同名的文件夹

点击选项栏Tools→Deployment→Configuration

配置服务器项目路径到本地文件路径的映射,在弹出的界面点击Mappings,改成服务器上建立的和本地相同的项目名所在目录,然后点击OK

从服务器下载项目:鼠标右击项目→Deployment→Download from ...

5.选择虚拟环境:File→Settings→Project→Python Interpreter→Add Interpreter,这一步和初次上传本地项目到服务器的步骤3操作相同,就不再多介绍了
ssh命令和Xshell工具🧰适合在命令行种进行一些简单的操作VSCode和PyCharm两款图形化界面工具🧰适合进行和服务器连接进行代码开发VSCode来连接服务器,通过它连接服务器进行项目开发比较方便,大家可以根据个人的习惯进行选择
scp,同时介绍一下如何进行断点续传Xftpscpscp是secure copy的缩写,它是通过SSH协议安全地将文件复制到远程系统或者从远程系统复制文件到本地的命令,使用SSH意味着它享有与SSH相同级别的数据加密,因此被认为是跨两个远程主机传输文件的安全方式。rcp是不加密的,所以scp是rcp的加强版。(正确的废话,大家了解就行)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-C:在复制过程中压缩文件或目录-p:保留文件的访问和修改时间🏠现在有如下已知基础信息:
| 名称 | 路径 |
|---|---|
| 服务器用户名 | 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️⃣步走,本质是要搞清楚从谁复制数据到谁那里去
⚠以下命令在命令行输入之后,回车后还需要输入远程服务器的登录密码🔑
🏠场景1️⃣: 将本地服务器(笔记本)文件推送到远程服务器文件夹下
10.193.193.211flyvideo-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 🏠场景2️⃣: 将本地服务器(笔记本)文件夹推送到远程服务器文件夹下
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 🏠场景3️⃣:将远程服务器文件拷贝到本地服务器(笔记本)文件夹下
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\ 🏠场景4️⃣: 将远程服务器文件夹拷贝到本地服务器(笔记本)文件夹下
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\ 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,但是这要求我们在同一个局域网内XFTP是一个功能强大的SFTP、FTP 文件传输软件。它使得Windows 用户能安全地在 UNIX/Linux系统和Windows系统之间传输文件。XFTP能同时适应初级用户和高级用户的需要。它采用了标准的Windows风格的向导,它简单的界面能与其他 Windows 应用程序紧密地协同工作,此外它还为高级用户提供了众多强劲的功能特性。
XShell的安装教程](# 2.3.3 安装Xshell ),毛毛张在这里就不细说了,下面直接介绍它的使用ssh协议,因此大家在继续下面的教程之前,有一些关于服务器的基础信息需要大家知道,毛毛张在这里列举了出来 hostname命令查看ifconfig命令查看ssh服务器监听的端口号默认是22,如果不是改成真实的端口号1.双击安装好的Xftp软件
2.打开的界面如下

3.按照下图所示步骤进行连接🔗

4.第一次连接🔗会弹出如下警告,选择接受并保存,下次就可以直接连接🔗

5.连接🔗成功后的界面如下,左边方框为本地文件磁盘的文件,右边区域为服务器磁盘的文件

6.此时就可以随意将本机上的文件上传到虚拟机上,直接拖动就可以实现左边为本地文件目录,右边为服务器的文件目录



Xftp的软件使用比较简单,它常常配合Xshell来一起使用,适用于喜欢图形化界面工具的人rsync🔥在Linux系统上传⬆️与下载文件⬇️的时候,由于网络原因很容易断开💔或者是大文件传输的情况下,如何在断开后继续传输不用重新开始💫,对开发及运维人员而言,是非常有意义❗的
由于篇幅📃的原因毛毛张只在这里提出这个问题和一种解决方案,就不具体的说怎么操作了,相信经过前面对于scp命令的学习,毛毛张只在这里提供几个参考性的教程,大家可以通过这几个教程自行学习一下rsync命令
参考教程:
scp命令Xftp软件背景介绍:
在使用Linux默认终端时比较纠结的是一个终端通常同一时间只能做一件事,虽然可以将任务放入后台,但是对于有输出或交互的任务放入后台并不是一个好的选择。
另一个比较纠结的问题是任务无法脱离终端运行,如果使用基础的命令使其脱离后台运行,下次就没法在终端中交互管理该任务了。
对于上面这些问题一般使用screen和tmux等终端复用与管理工具来处理。
使用场景: 很多新手经常碰到的问题就是按照网上的教程组了个服务器,然后安装运行了某些服务器软件,比如网站服务器、游戏服务器这些,然后退出终端后服务器就不工作了。使用screen和tmux这些工具就能很好的解决这个问题。screen和tmux这类工具的出现给linux服务器的使用带来了很大的便利,借助这些工具你可以让所有工作都在前台跑着,或者随意换电脑登陆继续之前的工作。
tmux基础功能和screen差不多,但是目前来说tmux总体上比screen更加好用些。所以毛毛张在这里就只介绍tmux这款终端复用器

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窗口会话的运行呢?请看下面的讲解!
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,接着就可以使用PgUpPgDn↑↓来查看历史信息了,按下q退出
①前面介绍的功能和语法,都是基于会话层面的操作,一个
tmux会话对应一个窗口,但是实际上,一个tmux会话可以有多个窗口,我们只需要在终端中通过tmux a -t session_name命令就又可以打开一个改会话的另一个窗口②每个窗口又可以分割成多个窗格,对窗口和窗格相关操作都是在已经进入
tmux会话的情况下进行的,下面就来详细介绍一下和窗口与窗格相关的操作
新建窗口
快捷键: Ctrl + b 和c
说明:多个窗口下底部带*标记的为当前活动窗口
切换窗口
方式1:列出所有窗口,可以预览并选择切换
快捷键 :Ctrl + bw
方式2:切换到指定会话号
快捷键:Ctrl + b会话数字
示例:进入0会话:Ctrl + b0
方式3:切换进入上一个窗口
快捷键:Ctrl + bp
方式4:切换进入下一个窗口
快捷键:Ctrl + bn
关闭窗口
快捷键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 + bspace
方式2:当前窗格与上一个窗格交换位置
快捷键:Ctrl + b{
方式3:当前窗格与下一个窗格交换位置
快捷键:Ctrl + b}
缩放窗格
快捷键:Ctrl + bz
说明:当前窗格全屏显示,再使用一次会变回原来大小
拆分窗格
快捷键:Ctrl + b!
说明:将当前窗格拆分为一个独立窗口
关闭窗格
快捷键1:Ctrl + bx
说明:关闭当前窗格,会提示是否确认关闭,按下y表示确认,即可关闭
快捷键2:Ctrl + d 关闭当前窗格,不需要确认
实例演示:
tmux内容挺多的,毛毛张在这里介绍的只是一部分常用的功能,更多内容可以使用 man tmux命令查看或者跳转到链接:https://github.com/tmux/tmuxtmux可以创建很多的会话、窗口、窗格,如果用的多的话在系统重启或崩溃的情况下一个个恢复就比较纠结了,针对这个情况甚至出了附加的工具来管理这些内容,可以参考该链接进行学习:https://tmuxp.git-pull.com/语法:
Command & 解释:如果想让程序在后台运行,在执行程序的时候,在命令的最后面加“&”符号
实例:用python运行test.py代码
# 待运行的文件test.py $ python test.py & # 查看程序是否在后台运行,同时查看改程序运行的PID号 $ ps -ef|grep test # 后台的程序需要关闭时,需要kill命令停止 # 通过上面命令查看程序运行的PID号 $ kill -9 进程号PID 注意:这种方法,除非程序自带的日志文件,否则无法查看程序运行的日志文件,不是很方便,不推荐
简介:
no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行nohup.out的文件到当前目录下,如果当前目录的nohup.out文件不可写,输出重定向到 $HOME/nohup.out 文件中语法:
nohup 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" # 双引号可带可不带 参数说明:
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 & 参数说明:
&1)的内容写入到 runoob.log 文件中runoob.log文件中,所以标准错误也被重定向到 runoob.log 文件中&是一个描述符,告诉shell这个重定向目标是一个文件描述符,而不是一个文件;如果1或2前不加&,会被当成一个普通文件这种方式可以让进程在后台运行,并输出日志,但是不方便手动停止进程,还需要用ps命令查看进程,再用kill命令进行查看
tmux就是解决关闭终端后服务器窗口程序还在运行的问题,因此tmux也可以实现程序在后台运行的逻辑,不仅如此,再次进入tmux窗口之后还能查看程序运行的输出tmux a -t session_name命令重新进入,比较方便kill会话即可这种方式相当于让进程在后台运行,并方便停止,关闭当前会话即可,但是不方便查看程序输出的日志
tmux窗口使用nohup命令来运行程序,这样就能在程序运行过程中查看日志了10.193.195.97的这样一串数字👏铺垫了这么久,终于可以进入正题介绍内网穿透工具frp的配置教程了!🛫
V0.49.0.ini变成了.toml,本套教程适用于旧版本版本的frp内网穿透工具#后面的文字均属于注释,粘贴在文件中或者命令行中是不影响程序的执行的,大家在自己配置的时候可以把这些注释删掉scp命令一般服务器都是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的文件属于配置服务端(公共网络服务器)的文件首先将之前下载并解压之后的文件夹移动到自己习惯的文件夹下,毛毛张移动到/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的服务端配置成功了,也就意味着内网穿透你已经成功了一半👏,下面进入客户端的配置
⚠在配置客户端的时候,你需要知道服务端配置的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 
🎇到这里,恭喜你,你基本成功了,剩下就是验证是否通了。
ssh -p 端口号 用户名@服务端IP命令登录局域网服务器,如果能够登录成功,就说明内网穿透成功了❗# ssh -p remotePort 局域网服务器用户名@serverAddr # 具体到本案例就是: ssh -p 8888 flyvideo@48.96.196.55 
👏如果能使用
ssh命令登录到服务器就说明内网穿透已经成功了
service和systemctl,而systemd是Linux系统最新的初始化系统(init),systemctl是systemd的一个命令行工具,用于管理systemd服务,systemd 取代了initd,成为内核加载完之后启动的第一个进程(PID为1),其他进程都是它的子进程,如下图所示

service命令一般只能启动、停止、重启和查看服务,systemctl命令则更广,通过systemctl命令,可以启动、停止、重启、查看、设置和管理系统中的各种服务和进程,包括系统初始化、进程管理、日志管理、网络管理等systemd 是Linux内核加载完成后启动的第一个进程。它会首先加载其管理的各种服务。如果希望自定义的服务在开机后自动启动,需要将服务配置文件放在 /usr/lib/systemd/system/ 目录下。该目录存放的是系统级服务脚本,这些服务可以在开机后立即运行,而无需用户登录。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及配置开机自启流程同上
# 赋值权限命令,777表示最高权限 chomd 777 文件名 /frpc: cannot execute binary file: Exec format error 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