WindowsのWSL上からVScodeでACRiのサーバーにログイン

 ここではWindowsのWSLからVScodeでACRiのサーバーにログインする環境を整えます。

なぜ、WindowsのWSL上からVScodeからACRiのサーバーにログインするのか?

 それは筆者の普段のFPGA開発スタイルがVScodeだけでソフトウェア開発と変わりないからです。GUIを使ってFPGA開発を行っている方もいますが筆者はGUIを使用しません(使用するのはごく稀にです)。

ACRiとは

 ACRiとはアダプティブコンピューティング研究推進体であり、ACRiが運営するFPGA利用環境を無償で利用できます。ACRiが運営しているサーバー上でFPGAのツールを使用して論理合成や配置配線を行い、評価ボードを使用して実機で動作確認を行うことができます。  利用に関する手続きや条件については次のリンクから確認してください。

ACRi ルームへようこそ!

実現する環境

 下図のように自分のPC(Client)からACRiのサーバにアクセスするのですがせっかくなら全部VScodeで済むようにしたい。そうすると、WindowsからファイルをコピーするのにWinSCPなどのツールを使うこともなくなります。コマンド入力のためのターミナルも別々に開く必要もなくなります。

実現する環境

WSLから使用する

 これを実現するだけであれば、WindowsのスタートメニューからVScodeを起動して、VScodeでコマンドパレットを開いて、Remote-SSHすればいいだけですがACriのホストに繋げるにはコマンドパレットではちょっと面倒なのでWindows Terminalから接続できるようにします、

手順

ACRiで予約

 まずはACRiで使用するサーバーを予約しなければいけません。

 ここではvs114というサーバーを予約したことにします。

vs114にアクセスできるか確認

 もし、sshpassやsshがインストールされていないのであれば、次のようにインストールしておきます。

sudo apt install sshpass ssh

 WSL上から次のようにコマンドを実行します。

sshpass -p PASSWORD ssh -o ProxyCommand="sshpass -p PASSWORD ssh -W SERVERNAME:%p USERNAME@gw.acri.c.titech.ac.jp" USERNAME@SERVERNAME

  PASSWORD = サーバーにログインするパスワード(Webログインのパスワードではない)   USERNAME = ACRiで登録したユーザー名  * SERVERNAME = 予約したサーバー名(ここではvs114)

 サーバーへのログインに成功すれば、次のようにプロンプトまで進みます。

$ sshpass -p PASSWORD ssh -o ProxyCommand="sshpass -p PASSWORD ssh -W vs114:%p USERNAME@gw.acri.c.titech.ac.jp" USERNAME@vs114
Warning: No xauth data; using fake authentication data for X11 forwarding.
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-193-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sat Nov 26 22:16:31 JST 2022

  System load:  0.02               Processes:             119
  Usage of /:   36.9% of 39.07GB   Users logged in:       0
  Memory usage: 12%                IP address for enp0s3: 172.16.11.14
  Swap usage:   0%


 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

119 packages can be updated.
2 updates are security updates.

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings


Last login: Fri Nov 25 22:35:57 2022 from 172.16.2.4
USERNAME@vs114:~$

 これができれば、あとはVScodeでremote-SSHするだけです。

.sshの用意

 WSLの.ssh/configに次のように追加します。

Host vs114
    ProxyCommand sshpass -p PASSWORD ssh -W vs114:%p USERNAME@gw.acri.c.titech.ac.jp
    User USERNAME

これでssh vs114を実行したときはパスワードを1回だけ尋ねてくるだけでサーバーにログインできます。

 もうひとつ重要なのがWindows側にも.ssh/configを追加しておきます。具体的にはC:\Users\USERNAME\.ssh\configに上記の設定を追加しておきます。Windows側にはsshpassコマンドがないので次のようにsshpassを外して設定します。

Host vs114
    ProxyCommand ssh -W vs114:%p USERNAME@gw.acri.c.titech.ac.jp
    User USERNAME

sshcodeコマンド

 VScodeでssh接続する前にsshcodeというコマンドを作成します。次のようにnanoなどのエディターを開いてsshcodeを作りましょう。

nano sshcode

sshcodeの中身はこんな感じのスクリプトです。

#!/bin/bash

# 引数: Host:Directory
location="$1"
if [ "$location" = "" ]; then
  echo "usage: $0 <host:path>"
  exit 1
fi

# HostとDirectoryを分割
host=${location%%:*}
dir=${location##*:}
if [ "$host" = "$dir" ]; then
  dir=""
fi

# Directoryがない場合はHome
home=""
if [ "$dir" = "" -o "${dir:0:1}" != "/" ]; then
  home="$(ssh $host pwd)/"
fi

# ssh with VScode
path="$home$dir"
code --folder-uri "vscode-remote://ssh-remote+$host$path"

 sshcodeはPATHの通っているところに置いてください。

ssh接続

 次のようにssh接続します。

sshpass -p PASSWORD sshcode vs114

 そうするとコマンドパレットで2回、パスワードを尋ねてくるので入力するするとVScodeが立ち上がります。

 初回だけ、パスワードは合計4回と起動後にVScodeサーバーをインストールするので時間がかかります。

実現する環境

 VScodeの左のアクティビティバーのエクスプローラを開くと、ssh接続コマンドで指定したディレクトリをワークスペースとして開くことができます(上記のコマンドではディレクトリをしていないのでホームが表示されている)。bashはVScodeを起動してから"ターミナル"-"新しいターミナルを開く"でターミナルを開いています(ショートカットで開いても良い)。

 ディレクトリを指定してssh接続する場合は次のようにディレクトリを指定して接続します。

sshpass -p PASSWORD sshcode vs114:/home/USERNAME/FPGA_PROJECT

sshの接続構成

 WSLからssh接続のコマンドを使用していますが起動するVScodeはWindows側のVScodeであって、VScodeがサーバーにssh接続するのはWSLのsshではなく、Windowsのsshを使用します。さらにACRiのサーバーへの接続はgw.acri.c.titech.ac.jp(fserv4)を踏み台としてアクセスします。

 図にすると下図のようなアクセスでVScodeが起動した後はWindows上でのアクセスに変わります。そのために、Windows側の.ssh/configも設定したのでした。

その他

別にサーバーにVSCodeを接続しなくてもよい

 サーバーにアクセスしなくてもサーバーと踏み台は同じストレージが見えるのでVScodeは踏み台にアクセスして、そこからターミナルを開いてサーバーにsshしてもいいんだけど…。

普段でも使える

sshcodeコマンド+VScodeはACRiでなくても普段の環境でも使用可能です。合成マシンを別のLinuxサーバーとかで行っているという環境であれば、同じように使えます。

writed: 2022/11/27/ 00:00:00