VScode鏈接服務器並配置公鑰-SSH Keys
一直在用Xshell做SSH連接服務器與虛擬機,但是中文亂碼的問題一直找不到解決方案,干脆使用編輯器自帶的插件,集成之后用起來也方便
1.概述
做法其實很簡單,VScode的應用商店中提供了Remote-SSH擴展,安裝后照着官方文檔配置就行了,不過文檔是英文的,所以這里做下翻譯和詳述。
2.安裝Remote-SSH
在應用商店中搜索Remote-SSH
,安裝:

安裝成功后,打開編輯器左側標簽,新建ssh鏈接:

輸入服務器ip后,選擇配置文件存儲位置(后面的公鑰也會放在此文件下,保證運行),配置按鈕打開配置文件:

此處可配置服務器名稱、ip、賬戶名等
配置好后,右鍵左側列表中需要鏈接的服務器,選擇在新窗口中鏈接,會提示輸入密碼,選擇操作系統,然后就登入成功了:

用法和在本機使用編輯器是一樣的,左側是資源管理,比起Xshell來直觀了很多,可以右鍵創建終端,方便快捷。
3.配置SSH-keys
如果不配置公鑰登錄,則每次都要輸入密碼,不像Xshell可以保存密碼。這點就麻煩多了,所幸公鑰登錄也不難配
首先需要創建一對鑰匙,保存在配置文件存儲位置,執行:
ssh-keygen -t rsa -b 4096
// 創建一對公鑰和私鑰(rsa加密,4096長度)
Generating public/private rsa key pair.
// 設置秘鑰儲存位置,默認是'~/.ssh'
Enter file in which to save the key (C:\Users\username/.ssh/id_rsa):
如何電腦中沒有ssh-keygen
命令,則需要安裝:
操作系統 | 安裝方式 |
---|---|
Windows 10 1803+ / Server 2016/2019 1803+ | Install the Windows OpenSSH Client. |
Earlier Windows | Install Git for Windows. |
macOS | 預裝 |
Debian/Ubuntu | Run sudo apt-get install openssh-client |
RHEL / Fedora / CentOS | Run sudo yum install openssh-clients |
生成秘鑰后,在目標文件夾('~/.ssh')下生成了兩個文件:
// 私鑰(放在本地)
id_rsa
// 公鑰(配置到服務器)
id_rsa.pub
4. 服務器配置
在下面挑選合適的操作系統命令,把公鑰配置到服務器的方式:
1.本地系統(macOS or Linux)=>服務器系統(macOS or Linux)
// 執行
// 使用你自己的服務器IP與登錄賬戶
export USER_AT_HOST="服務器賬戶名@服務器IP"
// PUBKEYPATH是你公鑰的路徑
export PUBKEYPATH="$HOME/.ssh/id_rsa.pub"
ssh-copy-id -i "$PUBKEYPATH" "$USER_AT_HOST"
2.本地系統(macOS or Linux)=>服務器系統(Windows)
// 執行
// 使用你自己的服務器IP與登錄賬戶
export USER_AT_HOST="服務器賬戶名@服務器IP"
// PUBKEYPATH是你公鑰的路徑
export PUBKEYPATH="$HOME/.ssh/id_rsa.pub"
ssh $USER_AT_HOST "powershell New-Item -Force -ItemType Directory -Path \"\$HOME\\.ssh\"; Add-Content -Force -Path \"\$HOME\\.ssh\\authorized_keys\" -Value '$(tr -d '\n\r' < "$PUBKEYPATH")'"
3.本地系統(Windows)=>服務器系統(macOS or Linux)
// 執行
// 使用你自己的服務器IP與登錄賬戶
$USER_AT_HOST="服務器賬戶名@服務器IP"
// PUBKEYPATH是你公鑰的路徑
$PUBKEYPATH="$HOME/.ssh/id_rsa.pub"
$pubKey=(Get-Content "$PUBKEYPATH" | Out-String); ssh "$USER_AT_HOST" "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '${pubKey}' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
4.本地系統(Windows )=>服務器系統(Windows )
// 執行
// 使用你自己的服務器IP與登錄賬戶
$USER_AT_HOST="服務器賬戶名@服務器IP"
// PUBKEYPATH是你公鑰的路徑
$PUBKEYPATH="$HOME/.ssh/id_rsa.pub"
Get-Content "$PUBKEYPATH" | Out-String | ssh $USER_AT_HOST "powershell `"New-Item -Force -ItemType Directory -Path `"`$HOME\.ssh`"; Add-Content -Force -Path `"`$HOME\.ssh\authorized_keys`" `""
配置成功之后,就可以不輸入密碼自動連接了。
5.最后
你可以單使用一對秘鑰,將同一個公鑰配置到你所有的服務器,然后一個秘鑰就可以自動登錄所有的服務器。如果你想為服務器配置單一不同的公鑰,則你需要生成多對秘鑰:
// 執行生成不同的秘鑰
// macOS / Linux系統
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa-remote-ssh
// Windows系統
ssh-keygen -t rsa -b 4096 -f "$HOME\.ssh\id_rsa-remote-ssh"
-f 參數用來配置秘鑰生成的路徑及名稱
生成后重復上述第4點的服務器配置,然后在你的配置文件(.ssh/config
)中為你的服務器配置IdentityFile屬性,如下:
Host 服務器名稱
User 登錄賬戶
HostName 服務器IP
IdentityFile 私鑰路徑
這樣就分離了不同的秘鑰。
