VS Code + SSH FS で学校の演習サーバーのファイルをリモート編集!【改訂版】
2021-1-16: version1.19.0対応
はじめに
これは弊高専の学生で「VS Codeで学校鯖に接続してぷよぐやみんぐしたい!」という人に向けた記事です.
弊学科の演習サーバーは諸事情でMicrosoft公式の「Remote - SSH」拡張機能が使えないので,VS Codeからファイルを編集するためには「SSH FS」という別の拡張機能を使う必要があります.
もし同じような環境の学生さんでしたら参考になるかも
※あとこの記事ではVS Codeの使用法などについては解説しませんその類の記事ありふれてるんで
前提環境
- OS: バージョン1709(2017年秋)以降のWindows10
- VS Codeをインストール済み
- VS Code以外のテキストエディタを使ってる人間は敵(Vimとメモ帳を除く)
(一応)VS Codeのダウンロードは↓から
https://code.visualstudio.com/download
早速設定をば
1. 拡張機能「SSH FS」をインストール
"ssh"で検索すると一番上に出てくるはず2番目になってんな
インストールが終わったら下の画像のように,画面左のアクティビティバーに新しいアイコンが追加されたかと思います.
これでSSH FSのインストールは完了
2. configファイルに設定を書き込み
次に,接続先とログインユーザの情報を設定に書き込みます.
①まず,アクティビティバーに新しく追加されたアイコンをクリックし,サイドバーの表示をSSH-FSに切り替えます.
②次に,CONFIGURATIONSにある新規ファイルアイコンをクリックしてください.
すると,「SSH-FS Settings」というタブが表示されると思います
そのタブ内の"Name"項目のテキストボックスに、接続先の名前を入力します(自由でいいです)
私の場合はHI科のサーバーに接続するので"hi_server"という名前にしました
名前を決めたら"Save"を押します
すると,各種細かい設定項目と,サイドバーの"SSH FILE SYSTEMS"にいま作成した接続先の名前が表示されたと思います
あとは設定に必要事項をいくつか入力するだけです
以下に必須入力項目を書いときます
項目名 | なにかくの |
---|---|
Host | 接続先のアドレス |
Port | HI科は4桁のやつ.TEはしらん |
Root | 自分のホームディレクトリの絶対パス(pwdコマンドで確認可能)*1 |
Username | e.g.) hi17furukawa |
Password | 設定してある自分のパスワード(パスワード認証の場合)※ |
Private key | Private keyの絶対パス(公開鍵認証の場合)*2 |
Passphrase | Private keyのパスフレーズ(公開鍵認証の場合)※ |
*1: Rootは/home/student/20XX/ユーザ名
という感じになるはず
pwd
コマンドの出力結果コピペでおk
*2: 複数のPCで設定を同期している場合,絶対パス内にユーザ名が含まれていてうまくいかないときは,$USERPROFILE
を使いましょう.これはユーザのホームディレクトリを示す環境変数です.
e.g.) $USERPROFILE\.ssh\id_rsa
接続する度にパスを入力する形にする場合は
3. saveして早速接続してみよう!
一番下にある"Save"ボタンを押して!さぁ!新しい時代の幕開けだ!
たまにこの"Save"ボタンが何度押しても反応しない場合があります!その時は諦めずもう一度1から書き込みましょう!!根性!!!畜生!!!!
いやなんで反応せんことあんねん
接続するときは"SSH FILE SYSTEMS"内に表示されてる接続先名を右クリックし"Connect as Workspace folder"をクリック!
(接続を切るときは,接続するときと同じ要領で"Disconnect Workspace folder"をクリックするだけ)
この右クリックしたとき表示されるメニューに「Open a remote SSH terminal」という項目が追加されています.
これを使うと,リモートのターミナルに接続するときにいちいちターミナルを開いて$ ssh hogehogeて打って~をする必要がなくなります.
ありがてぇ!!でもこれなんで最初からなかったんだ
これを使うことで各種コマンドを実行することができるので,コンパイル&実行などもここからできます!
公開鍵認証を使ってみよう!
いちいちパスワード打ち込むのめんどくせぇよって思ったことある人はぜひ
思ったことなくてもせめて知っとくべき
公開鍵認証で使われる「公開鍵暗号方式」は基本情報技術者試験にもでるよ!
公開鍵暗号方式について
Qiitaとかでいろいろ記事読むのが一番かと思います(というか自分で説明するための材料つくるのが面倒)
ここでよく使われる「RSA暗号」はサマーウォーズにも出てきたわね.巨大な数の素因数分解の難しさを利用したやつ
公開鍵認証を簡潔に説明すると,
1. 予め秘密鍵をクライアント側に、公開鍵をサーバ側へ置いておく
2. 接続するとき,クライアント側のユーザが自身の秘密鍵を使って暗号化された署名を作成する
3. その署名をサーバ側が公開鍵を使って検証(公開鍵で正しく復号)できれば,その秘密鍵の持ち主は正当なユーザだと判断できる
ってな感じ
詳しくは↓とかを読んでみるといいかも
パスワード認証だと,そのパスワードがバレてしまったらはい人生オワオワリって感じだけど,
公開鍵認証の場合は公開鍵がバレてもだいじょうぶ.(なんならGitHubで世界中の人の公開鍵みれる)
秘密鍵がバレたらやばいけどそもそも流出することがない.なぜなら秘密鍵は作られたPCから外に出す必要がない,認証するときも秘密鍵そのものは送らないから.
だから絶対秘密鍵は生成したPCから外に出すなよ!
鍵のつくり方
クライアント側のターミナル(コマンドプロンプトなど)で「ssh-keygen -t rsa -b 4096
」をッターーーーン!
おそらくここで鍵を置く場所とパスワードを聞かれる
場所は適宜、パスワードは別になくてもいいけどセキュリティ上設定しておくことを推奨
(パスワード設定するとちょっと面倒だし別にいいわ)
とりあえずEnterキー何度か押しとけばいいよ
するとid_rsa(秘密鍵)とid_rsa.pub(公開鍵)という2つのファイルが作られたかと思います
あとは何らかの方法で公開鍵(id_rsa.pub)をサーバ側に送ります(間違っても秘密鍵送るなよ!)(逆だったかもしれねェ...状態)
自身のホームディレクトリ下の.ssh/
にauthorized_keys
という名前のファイルを作成して公開鍵の中身をコピペ
もしこれで接続できなかった場合は
$ chmod 600 authorized_keys
$ chmod 700 ~/.ssh
というコマンドを打ってみましょう
参考になるページ↓
https://code.visualstudio.com/docs/remote/troubleshooting#_quick-start-ssh-key
鍵を管理してくれる「ssh-agent」
これは鍵を作るときにパスワードを設定した人向け
設定しなくていいよ
「サービス」ってアプリを検索(もしくはスタート>Windows管理ツール>サービス)して下の画像の通り"OpenSSH Authentication Agent"ってサービスのプロパティからスタートアップの種類を「自動」に,状態を「実行中」にしておく.
したら次はssh-agentに秘密鍵を登録
コマンドプロンプトを開いて,秘密鍵があるフォルダに移動して「ssh-add 秘密鍵ファイル名
」とコマンドを打つ
なんか鍵のパスワード聞かれたらパスワード打ってそしたら終わり
ちなみにこのOpenSSHは2017年のWindows 10 Fall Creator Update(Version 1709)から標準で同梱されているよう
ターミナルで簡単にssh接続できるようになる「ssh_config」
これ読んで
これを設定しておけば,コマンドプロンプト上で例えば$ ssh hi
と打っただけでhiサーバーにssh接続できるようになったり.
まあSSH FSのアップデートでこれは不必要になったけど,これを使えばそこらの操作がキーボードで完結するようになるから効率は上がる.
よければチャレンジしてみて
詳しい設定項目とかはこっちに載ってる
https://nxmnpg.lemoda.net/ja/5/ssh_config
おわりに
これでVS CodeでSSHごしにファイル弄れてターミナルでコマンド実行まで簡単にできるようになりました!!!!今日からキミも選ばれし者!!!!
というわけでここまでお疲れ様でした
不明な点などありましたら気軽にメンションアタックOKです
ぼくはいまからSummer Pockets REFLECTION BLUEの続きをプレイしようと思います.みんなもサマポケやって
なお弊学科の演習サーバーでRemote - SSH使えない原因
多分これですかね…?
— ろりば (@Lolitta_river) June 6, 2019
(https://t.co/hQXqrzinMx)
ほかにもこんなissue(https://t.co/IDUrF3WREe)見つけたのでremote ssh使うにはsshd_configいじって再起動する必要性があるのかなと……😭 pic.twitter.com/TMuENoi38D