天天看點

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 檔案,添加以下代碼。

      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 中執行

    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

      删除。

轉載于:https://www.cnblogs.com/capdiem/p/10926602.html

繼續閱讀