照本宣科
SSH(Secure Shell,安全外殼協議)是一種用于在不安全網絡上進行安全遠程登錄和實現其他安全網絡服務的協議.功能主要是遠程登陸和文件傳輸(使用scp)
為了建立 SSH 遠程連接,需要兩個組件:客戶端和相應服務端組件,SSH 客戶端是我們安裝在本地電腦的軟件;而服務端,也需有一個稱為 SSH 守護程序的組件,它不斷地偵聽特定的 TCP/IP 端口以獲取可能的客戶端連接請求。 一旦客戶端發起連接,SSH 守護進程將以軟件和它支持的協議版本作為響應,兩者將交換它們的標識數據。如果提供的憑據正確,SSH 會為適當的環境創建一個新會話。
MacOS 系統自帶 SSH 客戶端,可以直接使用,Windows 系統需要安裝 Xshell 客戶端軟件,大部分 Linux 發行版系統都自帶 SSH 客戶端,可以直接使用,可通過 ssh -V 命令查看當前系統是否有 SSH 客戶端。
原理
本地向遠程服務端發起連接 服務端隨機生成一個字符串發送給發起登錄的本地端 本地對該字符串使用私鑰(~/.ssh/id_rsa)加密發送給服務端 服務端使用公鑰(~/.ssh/id_rsa.pub)對私鑰加密后的字符串進行解密 服務端對比解密后的字符串和第一次發送給客戶端未加密的字符串,若一致則判斷為登錄成功
開始連接
給出的例子是ssh hello@microsoft.com -A,-A的作用是開啟認證代理連接轉發功能,-a則表示禁用。轉發的對象是端口號,這樣本地就可以使用服務器的服務,或者服務器使用本地的一些服務。
使用命令行的登陸需要每次輸入賬號和ip比較麻煩,所以可以使用配置文件一次性寫好。以vscode中的新建ssh連接為例,安裝好插件Remote-SSH,對SSH配置文件進行更新。配置文件有兩種:
/etc/ssh/ssh.conf和
~/.ssh/config分別是系統級別和用戶級別的配置,
配置方法完全一致,一般只會配置~/.ssh/config
文件,配置說明。
Host T4# 目標機的ip地址HostName xxx.xxx.xxx.xxx# 你目標機的用戶名User username# 目標機登錄端口Port 22
配置好之后就可以一鍵直連。
密鑰
ssh還可以用來登陸git,生成key來免密碼登陸git,
ssh-keygen -t rsa -C "codeideaai@gmail.com" -f "codeideaaigmailgithub"
-t rsa
:指定密鑰類型為 RSA。之外還有ed25519類型的-C "codeideaai@gmail.com"
:為密鑰添加注釋,通常使用郵箱地址作為標識。-f "codeideaaigmailgithub"
:指定生成的公鑰和密鑰文件的名稱。- 使用SSH-keygen生成GitHub密鑰教程_ssh-keygen -t rsa -c-CSDN博客
結果生成密鑰對。會在 ~/.ssh 生成兩個文件:
codeideaaigmailgithub
:私鑰文件,需要妥善保管,不要泄露。codeideaaigmailgithub.pub
:公鑰文件,可以公開分享,用于添加到 GitHub 或其他需要 SSH 認證的服務中。
高級配置
高級體現在兩點,一點是在服務器新建賬號,一點是使用私鑰公鑰。
新建root賬號,避免用戶之間互相影響。
sudo adduser youraccount
sudo usermod -aG sudo youraccount
上面的配置文件雖然方便,但是還是需要每次輸入密碼。另外一種選擇就是通過密鑰進行認證,和github的認證一樣。這里的username就是剛剛新建的root賬號。
Host T4# 目標機的ip地址HostName xxx.xxx.xxx.xxx# 你目標機的用戶名User username# 目標機登錄端口Port 22
IdentityFile ~/.ssh/id_ed25519 # 私鑰路徑
IdentitiesOnly yes # 強制使用指定密鑰
生成密鑰之后,復制公鑰存放在新建的root賬號路徑下:/home/xxxxx/.ssh/authorized_keys
權限設置:
chmod 700 /home/xxxx/.ssh
chmod 600 /home/xxxx/.ssh/authorized_keys
chown -R xxxx:xxxx ~xxxx/.ssh
登陸服務器后,就可以安裝annaconda,安裝虛擬環境,從git上面clone代碼。clone也需要sudo ssh-keygen -t rsa生成密鑰對,會存放在/home/xxx/.ssh/id_rsa 中。
為了從其他服務器scp拷貝,需要把其他服務器的公鑰也追加放入authorized_keys,在新服務器上操作:
echo "ssh-ed25519 AAAAC3NzaC1... user@client1" >> ~/.ssh/authorized_keys
安裝conda:
wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh
bash Anaconda3-5.3.0-Linux-x86_64.sh
最后配置環境變量
sudo vim ~/.bashrc
# 添加環境變量 ${USER} 用戶名
export PATH=/home/${USER}/anaconda3/bin:$PATH
source ~/.bashrcsource activate
conda --versionconda create -n 環境名 python=3.12
添加源:
Conda換源_conda換清華源-CSDN博客
debug
調試可以加斷點也可以打印log,但個人還是習慣打斷點。在vscode中,安裝了python debugger插件就可以實現打斷點。難點在于launch.json的配置。本來vscode會自動生成一份文件,但是調試中斷,這是文心一言加工后的:
{"version": "0.2.0","configurations": [{"name": "Python: 當前文件 (Conda)","type": "python", // 確保已安裝 VS Code Python 擴展"request": "launch","program": "${file}","python": "${command:python.interpreterPath}", // 自動獲取當前選中的解釋器"console": "integratedTerminal","justMyCode": true, // 跳過庫代碼調試"cwd": "${workspaceFolder}", // 工作目錄"env": {"PYTHONPATH": "${workspaceFolder}", // 可選:添加項目根目錄到 PYTHONPATH"WANDB_MODE": "offline" // 可選:調試時禁用 wandb 在線同步},"args": [] // 可選:命令行參數,如 ["--arg1", "value1"]},{"name": "Python: 模塊調試","type": "python","request": "launch","module": "your_module_name", // 替換為你的模塊名(如 `train`)"python": "${command:python.interpreterPath}","console": "integratedTerminal"}]
}
reference:
1.Linux ssh 基礎教程 - 我是唐青楓 - 博客園
2.https://zhuanlan.zhihu.com/p/614176659
3.pycharm EAP 構建出錯_pycharm eap build expired-CSDN博客
4.SSH遠程連接時報錯提示Permission denied (publickey).的解決方法 - 角刀牛Java - 博客園
5.SSH公私鑰免密連接遠程服務器_ssh連接服務器 公私鑰-CSDN博客