パソコンなどのローカル環境から外部サーバー(ここ:さくらVPSなど)に接続して各種設定を行う場合は、基本的にはSSHなどターミナル接続を行い、サーバー上のエディタなどを用いて設定ファイルなどの編集を行っている。
当方の場合は、ローカルのWindowsマシンよりPuttyを使用してSSH接続を行っている。サーバー側もSSHの設定を行いしっかりと鍵ペア認証による接続を行うことで安全性を保っている。ちなみにファイルのコピーには同じ鍵を用いたWinSCPを使用している。
サーバー上での設定ファイルの編集などは、当方ではEmacsを用いている。昔はワークステーション上でも重量級のエディタという印象だったので、チョットしたファイルの編集には不向きということで、専らVi系の軽いエディタを使用していた。まぁ昨今になるとマシンパワーのおかげでそれほど気にするレベルでも無いと言うことで、何となく惰性で使用している。しかし昔ほど気合いの入った設定とかは行う事無くほぼほぼインストールしたままで使用しているのでした。
ただし一点だけ、こだわりではないが、バックアップファイルの自動生成について、デフォルトの設定では、編集してセーブを行うと、元ファイルと同じディレクトリに「(元ファイル名)~」という「~」(チルダ)付きのバックアップファイルが大量発生して何とも見苦しい。その為、バックアップファイルは編集したユーザーのホームの「.saves」ディレクトリにバックアップファイルを世代付きで保存する方式に変更している。
編集対象ファイル例):/home/user-name/project/hogehoge/Readme.md
⇒バックアップファイル:/home/user-name/.saves/!home!user-name!project!hogehoge!Readme.md.~1~
のように元のパス情報を含めたファイル名で世代管理の番号を付けた状態で保存される。下記の設定を
(setq auto-save-default nil)
(setq backup-directory-alist `(("." . "~/.saves")))
(setq backup-by-copying t)
(setq delete-old-versions t
kept-ner-versions 6
kept-old-versions 2
version-control t)
各ユーザーの設定ファイル(.emacs)に記載しておく、当方の場合は自分以外に使用する人もいないという理由もあって/usr/shara/emacs/下のdefault.elに記載とか乱暴なことをやっている(汗)
設定ファイル以外に自作のツール(前回のblockset.pyのような)に関しても同様な環境でファイル編集を行っているが、こちらは何度もデバッグしたりGitHubなどでバージョン管理したいなどという欲求もあるため、もう少し最近のツールを使いたくなる。
そこで、最近使い始めたのが VScode+RemoteSSH。VScode(Microsoft Visual Sudio Code)というエディタ自体は前から色々使用していたのだが、Remote-SSHのモジュールを組み込むことで、あたかもローカルのファイルのようにサーバー側のファイルが編集出来、GitHubによるバージョン管理も出来るようになるというスグレモノでした。
設定方法もリンク先(Qiita)にあるように非常に簡単。ローカル側のWindowsのPowerShellでSSHの鍵ペアを生成し、接続用のConfigファイルをテンプレ通り作成する(ssh-agentで鍵登録が必要)だけでした。
- 鍵生成(Powershellターミナル)
PS> ssh-keygen.exe -t rsa -b 2048
User\name\.ssh に鍵ペアが出来上がります。下記のセッテファイルのパスさえしっかりしていればPuttyの鍵と同じもので良いかもしれない。 - コンフィルファイル作成ーVScddeで編集します(あらかじめ Remote-SSHエクステンションを組み込んでおく)。
VScodeウィンドウ左下の接続アイコンをクリックすると、ウィンドウ中央の選択項目に「Open SSH Configuration File…(Remote SSH)」が現れるのでクリックしてファイル「C:\Users\Name\.ssh\Config」を選択、編集を行い下記のように必要項目を記載する
Host <HOSTNAME>
HostName <HOST ADDRESS>
Port <NN>
User <NAME>
UserKnownHostsFile /dev/null
PreferredAuthentications publickey
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/<Name>/.ssh/id_rsa.pub
IdentitiesOnly yes
LogLevel FATAL
- ssh-agent 起動(Powershellターミナル)
PS> ssh-agent.exe
PS> ssh-add.exe -k .ssh/id_rsa
ふたたびVS Codeに戻り、左下の接続アイコンをクリックして現れる選択項目より「Connect Current Window to Host…」を選択、接続するサーバーの名前をクリックすると下側ペインにSSHのターミナルが現れ、以降、ファイルオープンにてSSH接続先のファイルが選択出来るようになり、ローカルファイル同様に編集、およびGitエクステンションでバージョン管理も可能となる。
不正アクセス対策ツールblockset.pyの解説をしようと思っていたけど、その前にこういう仕組みについても覚書きして置きたく思い、話題を前後させました。
あと、今回一番嵌まったのが、日常使用しているノートパソコンがSuefaceなのだが、最初余り深く考えずに設定したためユーザーフォルダ名が日本語になってしまっていました。Puttyまでは鍵の置場に日本語パスがあっても問題が無かったが、VScodeのRemoteSSHではそれが許されなかった。。。仕方が無いので、1バイト文字でパス名を構成出来るようにアカウントを作り直すはめになりました😢(強引に変更して後々問題になるよりも少々面倒でも安全な方を選択)