How to use Remote-SSH in Windows


對於不太會使用 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
    

本地連接遠程主機

  1. 配置基於 SSH 密鑰的身份驗證

    1. 自定義 SSH 密鑰文件名稱,使用你自己定義的名稱替代 id_rsa-remote-ssh

      ssh-keygen -t rsa -b 4096 -f "HOME\.ssh\id_rsa-remote-ssh"
      
    2. 編輯 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-ssh
      

      Host 僅僅是遠程服務器主機的名稱,我取的是 CentOS;HostName 是你的遠程服務器 IP 地址;User 是登錄用戶名稱,比如 root;IdentityFile 則是私有密鑰的相對路徑,也可以是絕對路徑。

    3. 將本地的 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"
      
  2. VSCode 下按下 F1 調起所有命令面板,運行 Remote-SSH: Connect to Host... 選擇你上一步配置好的主機,回車連接即可。

遇到的問題

  1. 在使用方法章節的 1.3 中執行 scpssh 命令時可能會遇到 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刪除。


免責聲明!

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



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