ここではWindowsのWSLからVScodeでACRiのサーバーにログインする環境を整えます。
それは筆者の普段のFPGA開発スタイルがVScodeだけでソフトウェア開発と変わりないからです。GUIを使ってFPGA開発を行っている方もいますが筆者はGUIを使用しません(使用するのはごく稀にです)。
ACRiとはアダプティブコンピューティング研究推進体であり、ACRiが運営するFPGA利用環境を無償で利用できます。ACRiが運営しているサーバー上でFPGAのツールを使用して論理合成や配置配線を行い、評価ボードを使用して実機で動作確認を行うことができます。 利用に関する手続きや条件については次のリンクから確認してください。
下図のように自分のPC(Client)からACRiのサーバにアクセスするのですがせっかくなら全部VScodeで済むようにしたい。そうすると、WindowsからファイルをコピーするのにWinSCPなどのツールを使うこともなくなります。コマンド入力のためのターミナルも別々に開く必要もなくなります。
これを実現するだけであれば、WindowsのスタートメニューからVScodeを起動して、VScodeでコマンドパレットを開いて、Remote-SSHすればいいだけですがACriのホストに繋げるにはコマンドパレットではちょっと面倒なのでWindows Terminalから接続できるようにします、
まずはACRiで使用するサーバーを予約しなければいけません。
ここでは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するだけです。
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
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接続します。
sshpass -p PASSWORD sshcode vs114
そうするとコマンドパレットで2回、パスワードを尋ねてくるので入力するするとVScodeが立ち上がります。
初回だけ、パスワードは合計4回と起動後にVScodeサーバーをインストールするので時間がかかります。
VScodeの左のアクティビティバーのエクスプローラを開くと、ssh接続コマンドで指定したディレクトリをワークスペースとして開くことができます(上記のコマンドではディレクトリをしていないのでホームが表示されている)。bashはVScodeを起動してから"ターミナル"-"新しいターミナルを開く"でターミナルを開いています(ショートカットで開いても良い)。
ディレクトリを指定してssh接続する場合は次のようにディレクトリを指定して接続します。
sshpass -p PASSWORD sshcode vs114:/home/USERNAME/FPGA_PROJECT
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は踏み台にアクセスして、そこからターミナルを開いてサーバーにsshしてもいいんだけど…。
sshcodeコマンド+VScodeはACRiでなくても普段の環境でも使用可能です。合成マシンを別のLinuxサーバーとかで行っているという環境であれば、同じように使えます。
writed: 2022/11/27/ 00:00:00