

🌈個人首頁: 神馬都會億點點的毛毛張

📌本篇博客分享的是基于局域網下的服務器連接🔗、文件傳輸以及內網穿透教程,內容非常完備?,涵蓋了在服務器上做深度學習的小伙伴的大部分日常需求的操作?記得點贊?、收藏?加關注?后再觀看啦?
文章目錄
- 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 mmzHostName 10.123.123.123User 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