對於不太會使用 Vim 的我來說,在服務器上用 Vim 去修改 nginx.conf 實在有點麻煩,比如沒有高亮和格式化。正好想起前不久微軟發布了遠程開發工具包,其中一個就是今天要介紹的 Remote-SSH。下面是官方對該擴展的定義:
The Remote - SSH extension lets you use any remote machine with a SSH server as your development environment. This can greatly simplify development and troubleshooting in a wide variety of situations.
因此用來修改 nginx.conf 也是符合其目標的。
執行環境
- Windows 10
- Powershell Core 6.2.0
- Visual Studio Code Insiders:因為 Remote-SSH 還在 Preview 階段,只能開發版的 VSCode 中使用。
- 遠程 Linux 主機
使用方法
在 Remote-SSH 擴展的介紹頁面下其實是有一個快速開始文檔的,簡單來說就是在成功安裝該擴展之后,需要配置服務端和本地客戶端的環境。
在服務器上安裝 SSH 服務
同樣有文檔:
-
Debian / Ubuntu
Run sudo apt-get install openssh-server -
RHEL / Fedora / CentOS
Run sudo yum install openssh-server && sudo systemctl start sshd.service && sudo systemctl enable sshd.service
本地連接遠程主機
-
配置基於 SSH 密鑰的身份驗證
-
自定義 SSH 密鑰文件名稱,使用你自己定義的名稱替代
id_rsa-remote-ssh。ssh-keygen -t rsa -b 4096 -f "HOME\.ssh\id_rsa-remote-ssh" -
編輯 SSH config 文件,添加以下代碼。
Host name-of-ssh-host-here HostName your-fqdn-or-ip-goes-here User your-user-name-on-host IdentityFile ~/.ssh/id_rsa_remote-sshHost 僅僅是遠程服務器主機的名稱,我取的是 CentOS;HostName 是你的遠程服務器 IP 地址;User 是登錄用戶名稱,比如
root;IdentityFile 則是私有密鑰的相對路徑,也可以是絕對路徑。 -
將本地的
id_rsa-remote-ssh.pub的內容追加到遠程服務器的authorized_keys文件里。# 將`name-of-ssh-host-here`替換成你第二步里面的Host后面的值即可,這里可以用單引號或者雙引號 $REMOTEHOST='name-of-ssh-host-here' # 這里一定要使用雙引號 $PATHOFIDENTITYFILE="$HOME\.ssh\id_rsa-remote-ssh.pub" # scp 是 linux 系統下基於 SSH 登陸進行安全的遠程文件拷貝命令。這里把本地的公開密鑰復制到服務器端的`~/tmp.pub`中。該命令運行之后需要輸入服務器登錄密碼。 scp $PATHOFIDENTITYFILE "$REMOTEHOST`:~/tmp.pub" # 通過 SSH 向服務器執行以下一組命令,執行成功后本地的密鑰就被追加到服務器的`~/.ssh/authorized_keys`文件里。 ssh $REMOTEHOST "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat ~/tmp.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && rm -f ~/tmp.pub"以上是初次添加公鑰時需要對
~/.ssh設置了權限。以后再添加其他機器的公鑰就不需要執行chmod操作了,直接將公鑰追加到authorized_keys文件即可。ssh $REMOTEHOST "cat ~/tmp.pub >> ~/.ssh/authorized_keys && rm -f ~/tmp.pub"
-
-
VSCode 下按下
F1調起所有命令面板,運行Remote-SSH: Connect to Host...選擇你上一步配置好的主機,回車連接即可。
遇到的問題
-
在使用方法章節的 1.3 中執行
scp和ssh命令時可能會遇到Permission denied的問題。把 Powershell 以管理員身份運行也報同樣的錯誤。請執行以下命令,看看是否存在多個相同命名的可執行文件。where.exe scp # 我的輸出: # C:\Windows\System32\OpenSSH\scp.exe # D:\Scoop\shims\scp.exe where.exe ssh # 我的輸出: # C:\Windows\System32\OpenSSH\ssh.exe # D:\Scoop\shims\ssh.exe如果存在,那么優先或默認會使用前一個可執行文件(
System32/OpenSSH下的scp),結果我們已經知道,會報“權限不足”的錯誤。當我使用后一個可執行文件(Scoop/shims下的scp)時,竟然成功了。解決辦法有兩種:
-
使用
scp時,把路徑打全。ssh同理。D:\scoop\shims\scp.exe $PATHOFIDENTITYFILE "$REMOTEHOST`:~/tmp.pub" -
把系統環境變量
PATH里的C:\Windows\System32\OpenSSH刪除。
-
