VS CodeのRemote SSHでサーバーに接続する(Windows・WSL・遺伝研スパコンで詰まる人向け)

VS CodeのRemote SSHを使うと、スパコンや研究室のワークステーション上にあるファイルを、手元のPC上にあるファイルとだいたい同じように開いて編集できます。

ターミナルもサーバー上で開くので、ファイルを編集して、コマンドを実行して、結果を確認するところまでVS Code内で完結します。
サーバ上のファイルの手元に持ってくることも、手元のファイルをアップロードするのも直感的にできます。

とても便利なのですが、特にWindowsではSSHの鍵やconfigファイルがどこにあるのかわからなくなりがちです。
普段WSLで作業している場合、Windows側とWSL側にそれぞれ.sshディレクトリがあるので、片方では接続できるのにVS Codeからは接続できない、ということがよくあります。

この記事では、その辺も含めてVS code自体も使っていないビギナー向けに書きます。

Google Antigravityなど、VS Code系のエディタでも似た方でSSH設定を使える場合があります。

VS CodeとRemote-SSHを入れる

まず、VS Codeをインストール。https://code.visualstudio.com/Download

VS Codeを開いたら、色々でてくる設定を済ませます。このあたりの設定は後でいくらでも変更できるのでテキトウにポチポチやっても大丈夫です。

左側にある拡張機能のアイコンをクリックします。

検索欄に、

Remote - SSH

と入力し、Microsoftが提供しているRemote – SSHをインストールします。
似た名前の拡張機能が出てくる場合があるので、提供元がMicrosoftになっていることを確認してください。

普段のターミナルからSSH接続する方法を確認する

VS Codeから接続する前に、まず普段使っているターミナルからサーバーへSSH接続してる方法を確認します。

MacやLinuxでは、普段使っているターミナルを開きます。
Windowsの場合は、PowerShell、コマンドプロンプト、Windows Terminal、WSLのUbuntuなど、普段SSH接続に使っているものを開きます。

ややこいので、以下のどのパターンかをちゃんと確認してください。

ssh アカウント名@example.server.ac.jp

と入力してる場合、ここで聞かれるものには2種類あります。
Password: サーバーのアカウントのパスワードなので→次の章にスキップ
Passphrase: 秘密鍵に設定した合言葉です。これはサーバーのパスワードじゃないので→公開鍵認証でログインしてるはず
何も聞かれずにログインできる場合: 公開鍵認証が設定済みで、さらにssh-agentなどが鍵を覚えている可能性がある→公開鍵認証でログインしてるはず

ssh -i ~/.ssh/秘密鍵ファイル アカウント名@example.server.ac.jp

と入力してる場合→公開鍵認証でログインしてるはず

公開鍵認証でログインしている場合

特に、スパコンの利用開始時に一度だけ鍵を作成し、~/.ssh/config ファイルも設定している場合、その後は短いSSHコマンドだけで接続できるので、鍵を使っていることを忘れがちです。

自覚ない人は~/.ssh/configを開いてみて以下のような記述があれば、~/.ssh/id_ed25519 みたいなのが秘密鍵ファイルです。

Host myserver 
  HostName example.server.ac.jp
  User アカウント名
  IdentityFile ~/.ssh/秘密鍵ファイル

また、秘密鍵の名前がid_ed25519やid_rsaなどの標準的な名前になっている場合、IdentityFileを書いていなくても、SSHが自動的に~/.sshの中の鍵を探して使うことがあります。
どの鍵を使っているかわからない場合は、ssh -v 接続先で確認できます。Offering public key: の後ろに出てくるファイルが、SSHがつかってる秘密鍵です。

実際は~/.ssh/id_ed25519 というファイルそのものだけでなく、
~/.ssh/id_ed25519(秘密鍵)と ~/.ssh/id_ed25519.pub(公開鍵)がセットであるはずです。

VS Codeからサーバーに接続する

VS Code左下にあるRemoteのアイコン をクリックします。

表示されたメニューから、

を選びます。

すでにSSHのconfigファイルを設定している場合は、接続先の名前が一覧に表示されます。

まだ設定していない場合は、

を選びます。

普段ターミナルで使っているSSHコマンドを入力します。

ssh アカウント名@example.server.ac.jp

や

ssh -i ~/.ssh/秘密鍵ファイル アカウント名@example.server.ac.jp

SSHの設定を保存するファイルを聞かれたら、通常はユーザーのホームディレクトリにあるconfig(C:\Users\user\ssh\configとか)を選びます。
このconfigファイルを後で編集するので、覚えておいてください。

設定後、もう一度左下のRemoteアイコンから、
Connect to Host... を選ぶと、追加した接続先が表示されます。

接続先をクリックすると、新しいVS Codeのウィンドウが開きます。
初回接続時には、接続先のOSを聞かれることがあります。スパコンや研究室のワークステーションであれば、多くの場合はLinuxです。
PasswordやPassphraseを設定している場合は、入力を求められます。
接続に成功すると、VS Code左下に接続先の名前が表示されます。

(ここうまく行かなくてもconfigをちゃんと設定すれば大抵つながるのでまだ諦めないで→こっち。
特に、普段WindowsでWSLのターミナルから接続している場合はここで失敗すること多いので次を読んでください。)

SSHのconfigファイルを編集する

うまく接続できない場合や、入力を端折りたい場合などはconfigファイルを編集しましょう。

まずVS Codeでコマンドパレットを開きます。
Windows・Linuxでは Ctrl + Shift + P、Macでは Command + Shift + P を押してください。
コマンドパレット(上に出てくる検索欄みたいな場所)に

Remote-SSH: Open SSH Configuration File...

と入力し、表示されたファイル一覧の内、さっきSSHの設定を保存したファイルを選択します。

するとconfigファイルが開かれるので、例えば以下のように編集します。

# myserver は好きな名前でよい
Host myserver
  HostName example.server.ac.jp
  User アカウント名
  IdentityFile C:/Users/user/.ssh/id_ed25519 

※ Windowsでも、SSH configの中では C:/Users/user/.ssh/id_ed25519 のように / で書くとトラブルが少ない。

WindowsのWSLでSSH接続していた場合

鍵(IdentityFile)が置いてある場所がWSLの仮想homeの下にある場合がほとんどだと思います(/home/user/.ssh)。
この場合、VS code側からはこのファイルが見れないし、そのパスも通用しないので、
鍵自体をコピーして、configファイルが置かれている場所(C:/Users/user/.ssh/)にコピーしましょう。

WSL側から以下でコピーできます。

mkdir -p /mnt/c/Users/user/.ssh
cp /home/user/.ssh/id_ed25519 /mnt/c/Users/user/.ssh/
cp /home/user/.ssh/id_ed25519.pub /mnt/c/Users/user/.ssh/

つながったらまずはフォルダをつなげてみよう

左のエクスプローラーボタンをクリックして、Open Folderをクリックすると、
サーバーのパスが表示されるので、好きなフォルダを選んだり作成する。
すると普段のファインダーやエクスプローラーみたいにフォルダの中身が一覧できるようになります。
ここでスクリプトやPNGをクリックすれば、そのまま中身を見れます。
手元のPC側にダウンロードしたければファイルを右クリックすればできるし、
手元のファイルをそのままドラッグアンドドロップすればアップロードできます。

拡張機能でいろんな機能が提供されてるのでうまく使えば、PDFもそのまま開けるし、エクセル用の表ビューもできます

基本的なことですが(私は昔無頓着だったことを反省しています)、
こういうエディターはプロジェクトごとにフォルダをきちんと分けて、その中で完結する形にしたほうがいいです。
以下のような形にすれば、各projectのフォルダをVScodeで開けば

├── project1
│   ├── data
│   └── script
└── project2
    ├── data
    └── script

遺伝研スパコンのa001へVS Codeから直接接続する

遺伝研スパコンでは、通常はまずゲートウェイノードに接続し、その後で、

ssh a001

を実行してインタラクティブノードへ移動します。

VS CodeのRemote SSHから使う場合は、ProxyJumpを設定して、手元のPCからa001へ直接接続できるようにします。最終的なconfigは、次のようになります。

Host nigsc-gw
    HostName gw.ddbj.nig.ac.jp
    User アカウント名
    IdentityFile ~/.ssh/id_ed25519_nigsc-gw
    IdentitiesOnly yes

Host nigsc-a001
    HostName a001
    User アカウント名
    IdentityFile ~/.ssh/id_ed25519_nigsc-gw_a001
    IdentitiesOnly yes
    ProxyJump nigsc-gw

以下、この設定を作ります。

1. まずゲートウェイノードへ接続できることを確認する

ターミナルを開き、普段使っている方法でゲートウェイノードへ接続できることを確認します。

例えば、ユーザー名を指定して接続している場合は次のようになります。

ssh アカウント名@gw.ddbj.nig.ac.jp

秘密鍵を明示的に指定して接続している場合は、普段使っているコマンドをそのまま実行してください。

ssh -i ~/.ssh/秘密鍵ファイル アカウント名@gw.ddbj.nig.ac.jp

また、前の章で説明したように、~/.ssh/configに設定を書いている場合は、その接続先の設定を確認してください。特にIdentityFileに指定されているファイルが、実際に使用される秘密鍵です。

2. a001接続用の鍵を手元のPCに作る

ProxyJumpを使ってa001へ直接接続する場合、a001に接続するための秘密鍵も手元のPCに必要です。

ターミナルで、次のコマンドを実行します。

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_nigsc-gw_a001

鍵のパスフレーズを設定するか聞かれます。

設定してもよいですが、空欄のままEnterを押すこともできます。

実行後、.sshディレクトリに次の2ファイルが作られます。

~/.ssh/id_ed25519_nigsc-gw_a001
~/.ssh/id_ed25519_nigsc-gw_a001.pub

拡張子がない方が秘密鍵です。秘密鍵は人に渡しちゃだめ。

3. 公開鍵をa001へ登録する

まず、ゲートウェイノードへ接続します。

ssh nigsc-gw

次に、ゲートウェイノードからa001へ接続します。

ssh a001

a001へ入ったら、~/.sshディレクトリがあることを確認します。

mkdir -p ~/.ssh
chmod 700 ~/.ssh

次に、手元のPCで作成した公開鍵、

id_ed25519_nigsc-gw_a001.pub

の中身を表示します。

cat ~/.ssh/id_ed25519_nigsc-gw_a001.pub

表示された1行をすべてコピーしてください。

a001側で、公開鍵をauthorized_keysに追記します。

vim ~/.ssh/authorized_keys

ファイルの末尾に、コピーした公開鍵を1行で貼り付けて保存します。

保存後、権限を設定します。

chmod 600 ~/.ssh/authorized_keys

4. configに設定を書く

VS Codeでコマンドパレットを開きます。Ctrl + Shift + P か Command + Shift + P

次のコマンドを選びます。

Remote-SSH: Open SSH Configuration File...

自分が普段使っているSSH設定ファイルを開き、次の設定を追加します。

Host nigsc-gw
  HostName gw.ddbj.nig.ac.jp
  User アカウント名
  IdentityFile ~/.ssh/id_ed25519_nigsc-gw
  IdentitiesOnly yes

Host nigsc-a001
  HostName a001
  User アカウント名
  IdentityFile ~/.ssh/id_ed25519_nigsc-gw_a001
  IdentitiesOnly yes
  ProxyJump nigsc-gw

アカウント名は、自分のものに置き換えてください。

5. ターミナルから接続を確認する

VS Codeから接続する前に、ターミナルからa001へ直接接続できることを確認します。
(WSLの場合は/home/user/.sshのconfigファイルに上記の内容を書き込むと確認できる)

ssh nigsc-a001

a001へログインできれば、設定はできています。

6. VS Codeからa001へ接続する

VS Code左下のRemoteアイコンをクリックします。

Connect to Host... → nigsc-a001 の順に選びます。

この状態で、File → Open Folder...
を選ぶと、a001から見えるホームディレクトリや解析フォルダを開けます。

コメント