Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

remote-sshが使えないけどVSCodeでリモートサーバ上のFortranファイルを編集したい!

ターゲット

  • リモートサーバ上でVimとかEmacsでファイルをたくさん編集するのはチョットツライ人

要約

  • sshfsでリモートサーバ上のディレクトリをマウントしてローカルPCでVSCodeを開いて編集する(これでわかる人は以下の文章は読まなくて大丈夫かも)

VSCodeで編集する方法の分類

大まかに2種類の編集方法がある

ホスト側がssh agent forwardingを有効にしてくれているかどうかで手順がかなり違う

ssh agent forwardingを有効にしてくれているとき

VSCodeの拡張機能のremote developmentの中にあるremote-sshを使ってssh接続するだけで,VSCodeでリモートサーバ上のファイルが触れるようになる(正確にはローカルでは表示だけしてリモートでVSCode serverを動かしているらしい)

この記事では解説しない

ssh agent forwardingが無効のとき

サーバ管理者に/etc/sshd_configをremote sshが使えるように設定するように依頼して承認されればremote-sshを使える,それが出来ない場合は以下の手順を踏むことになる

セットアップの概略

  • gfortranをインストールして
  • fortran-language-serverをインストールして
  • VSCodeの拡張機能のModern FortranFORTRAN IntelliSenseをインストールして
  • sshfsを使ってリモートサーバの任意ディレクトリ下をローカルにマウントして同期させ
  • ローカルマシンでFortranファイルをVSCodeで編集

とりあえずWSL2(Ubuntu-20.04)でのセットアップを紹介する(WindowsとmacOSについては外部リンクを張る,またはコマンドの表記程度にとどめる)
WSL2の導入についてはMicrosoftの公式インストールガイドに沿って進めればOK

gfortranのインストール

以下の2行でOK

sudo apt update
sudo apt install gfortran

WindowsならMingw-w64をダウンロードしてインストール,pathの設定をする
macOSならhomebrewをインストールした後

sudo brew install gcc

で使えるようになる

fortran-language-server

FORTRAN IntelliSenseが使うのでインストールする
pipを使ってインストールするがUbuntu環境のpipは少し特殊なためコマンドに注意

sudo apt install python3-pip
pip3 install fortran-language-server

Windowsならpython公式からダウンロード,インストールしてpathを設定してfortran-language-serverをインストール

macOSなら最初からpython3が入っているはずなのでそのまま

pip3 install fortran-language-server

でOK

VSCodeの拡張機能のインストールと設定

VSCodeの拡張機能からFortranと検索してModern FortranFortran IntelliSenseをインストールするだけ
fortranextensions.png

which fortls
which gfortran

でfortran-language-serverとgfortranのpathを取得して

VSCodeのsettings.json(WSL:Ubuntu-20.04)に

settings.json
"fortran.gfortranExecutable": "gfortranのpath",
"fortran-ls.executablePath": "fortran-language-serverのpath",

を追記すればVSCodeのFortranの設定は完了

リモートサーバ上のファイルのマウント

sshfsを使う

sudo apt install sshfs
# マウント用のディレクトリを作る
mkdir ~/sshfs
sshfs {sshログインで使うユーザ名}@{リモートサーバのIPアドレス}:{リモートサーバのマウントしたいディレクトリ} {ローカルのマウントポイント} -o IdentityFile={IdentityFilePath}

これでローカルのマウントポイントにリモートサーバの指定したディレクトリ下のファイルがマウントされる

起動時に自動マウントさせるなら/etc/fstabを管理者権限で開いて

sshfs#{sshログインで使うユーザ名}@{リモートサーバのIPアドレス}:{リモートサーバのマウントしたいディレクトリ} {ローカルのマウントポイント} fuse users,allow_other,delay_connect,reconnect,uid={user id},gid={group id},IdentityFile={IdentityFilePath} 0 0

を書き込めば起動時に自動マウントされるはず(起動時にマウントするのでコマンドが打てるようになるまでの時間は数秒増える)
user id,group idはターミナルでidコマンドを実行すると現在のログインユーザのuid,gidが表示されるのでその番号を打てばよい

[2021/09/23 追記]
WSL2(Ubuntu20.04)環境においてarch-linux.jpのsshfsの記事によると、自動マウントはrootユーザによっておこなわれるので,fstabを編集するだけでは起動時マウントはできない
なので下記のような編集が必要になる

  • rootユーザで1度手動でsshfsを使ってマウント(/root/.ssh/known_hostsに署名を追加するため)
# sshfsでマウント
sudo sshfs {sshログインで使うユーザ名}@{リモートサーバのIPアドレス}:{リモートサーバのマウントしたいディレクトリ} {ローカルのマウントポイント} -o IdentityFile={IdentityFilePath}

ログインユーザのパスワードが求められるので入力すると

The authenticity of host '{リモートサーバのIPアドレス}' can't be established.
ECDSA key fingerprint is SHA256:{ハッシュ値}.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

と聞かれるはずなので,yesで/root/.ssh/known_hostsに署名を追加する

  • /etc/fuse.confの編集(sshfsのallow_otherを有効にするため)
sudo vim /etc/fuse.conf

で/etc/fuse.confを開いて
最終行の

#user_allow_other

のコメントアウトの#を編集して取り除く

ここまで終わったらUbuntuをシャットダウンさせて再起動させる
以上の工程を経ると,起動時(初回アクセス時)にsshfsによるリモートサーバの任意ディレクトリの自動マウントが可能になる

[2021/09/23 追記ここまで]

これでVSCodeで編集できるようになったので

code ~/sshfs/{開きたいディレクトリ}

で開くとVSCodeでリモートサーバ上のファイル(をローカルにマウントしたもの)をいじれるようになる

Windowsならこのとおりにセットアップするといい
macOSならこれを参照するとよい

感想

remote-sshが使える環境の楽さが身に染みて分かった

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?