VScode鏈接服務器並配置公鑰-SSH Keys


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 私鑰路徑

這樣就分離了不同的秘鑰。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM