3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-09-05

ターゲット

  • リモートサーバ上で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のインストール

以下の2行でOK

shell
sudo apt update
sudo apt install gfortran

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

shell
sudo brew install gcc

で使えるようになる

fortran-language-server

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

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

Windowsならpython公式からダウンロード,インストールしてpathを設定してfortran-language-serverをインストール
macOSなら最初からpython3が入っているはずなのでそのまま

shell
pip3 install fortran-language-server

でOK

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

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

shell
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を使う
[2022/04/03 追記]

  • これまでに紹介していた/etc/fstabで自動マウントを設定する方法は,Ubuntu起動時に自動マウントを始める方法だと紹介していたが,マウントポイントにアクセス(cdやlsするなど)すると自動マウントをし始めるような挙動になっていた
  • Ubuntuログインにマウントのための時間がかかるのと,マウントポイントの初回アクセス時にマウントのための時間がかかるのと,どちらがユーザの体験を損ねないかについては意見が分かれそうなので両方のやり方を残しておく
  • 以下の例では$HOME/sshfsをマウントポイントにする場合の設定を記述するので各環境ごとに書き換えが必要
  • 公開鍵認証(パスワードなし)を前提にしている

[2022/04/03 追記ここまで]

Ubuntu起動時 Ubuntuログイン時にマウントする設定

shell
sudo apt install sshfs
# マウント用のディレクトリを作る
mkdir ~/sshfs
# Allow_otherを有効化して,マウント先のディレクトリをマウント後もログインユーザの権限で操作できるようにする
sudo sh -c 'echo user_allow_other >> /etc/fuse.conf'
# $HOME/sshfsをマウントポイントとしてマウントできるならマウントする
# (デフォルトでインストールされているはずだがmountpoint is not foundなどと出たらsudo apt install util-linuxでmountpointコマンドをインストール)
echo -e "if [ \"\$(ls \$HOME/sshfs)\" ]; then\n\tif ! mountpoint -q \$HOME/sshfs ; then\n\t\techo \"\$HOME/sshfs is not empty.  No mount operation is performed.\"\n\tfi\nelse\n\tmount\nfi" >> $HOME/.profile
# マウント用のコマンド
echo "alias mount='sshfs -o uid=\`id -u\` -o gid=\`id -g\` -o allow_other -o nonempty {sshログインで使うユーザ名}:{リモートサーバのマウントしたいディレクトリ} {ローカルのマウントポイント} -o IdentityFile={IdentityFilePath}'" >> $HOME/.profile

マウントポイントにアクセス(cdやlsするなど)すると自動マウントをし始める設定

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

  • rootユーザで1度手動でsshfsを使ってマウント(/root/.ssh/known_hostsに署名を追加するため)
shell
sudo apt install sshfs
# マウント用のディレクトリを作る
mkdir ~/sshfs
# Allow_otherを有効化して,マウント先のディレクトリをマウント後もログインユーザの権限で操作できるようにする
sudo sh -c 'echo user_allow_other >> /etc/fuse.conf'
# 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/fstabを管理者権限で開いて

shell
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が表示されるのでその番号を打てばよい

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

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

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

で開くとVSCodeでリモートサーバ上のファイル(をローカルにマウントしたもの)をいじれるようになる
Windowsならこのとおりにセットアップするといい
macOSならこれを参照するとよい

感想

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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?