サーバー上のファイルを直接編集する方法。Ubuntuならsshfsが便利!
こんにちは!
東京オリンピックの開会式向けに当初用意されていた4連休を、コロナで延期になったために、過去数年分のブログの整理に費やすことになった、しずかなかずしです。
世の中の自称ブロガーのみなさん、ブログを書きっぱなしにしていませんか?
私のこの「しずかなかずし」ブログも記事数が300を越え、整理するのに手に余る状態です。昔の記事は捨てても良いようなものも多いのですが、たまに読まれることもあるので、何となく取っておいています。
しかし、記事のカテゴリーやタグが、当初想定から変わってきているものもあるので、この4連休でカテゴリーやタグの整理を始めました。
そんな作業の中で、これは便利!と気づいたレンタルサーバーのファイル編集のやり方をご紹介します。
Ubuntuを使ってSSH設定
私の作業環境は、Ubuntu (Linux)です。エックスサーバーは、SSHで通信ができるので、ターミナルからSSHでログインが可能です。サーバー上のファイルを直接編集するためには、SSHでログインして、viなどのテキストエディタで編集することもできます。
それではまず、SSHでログインしてみましょう。
以下のサイトが参考になります。
秘密鍵の生成
エックスサーバーのサーバーパネルを開き、「SSH設定」に進みます。
SSH設定でSSHの接続を有効にします。
この画面に、ポート番号に関する注意書きがあります。SSHはデフォルトでポート番号22番を使いますが、エックスサーバーのSSHの設定は10022番になっています。従って、SSHクライアントソフトや、後述のsshfsでは、明示的にポート番号10022を指定する必要があるという訳です。
公開鍵認証用鍵ペアの生成タブに進みましょう。
パスフレーズのところに好きなキーワードを設定します。パスワードみたいなものです。
SSHクライアントを実行する際にここで入力したパスフレーズが必要となりますので、覚えておきましょう。
確認画面に進んで、秘密鍵をダウンロードします。ここでは、ダウンロードした鍵ファイルは「shiz.key」という名前でダウンロードされたものとして、以降の説明を続けます。
SSHコマンドの設定
SSHの秘密鍵ですが、通常デフォルトでは「~/.ssh/id_rsa」から読み取ります。私の場合はデフォルトは別の用途に使っていたので、「~/.ssh/shiz.key」に置くことにしました。
エックスサーバーからダウンロードした秘密鍵「shiz.key」を以下のように「〜/.ssh/shiz.key」に移動します。
そして、適切なファイルの権限の設定を「chmod」で実行します。
$ mkdir ~/.ssh
$ mv shiz.key ~/.ssh/shiz.key
$ chmod 700 ~/.ssh
$ chmod 600~/.ssh/shiz.key
SSHログイン
設定ができたら、ログインしてみましょう。
仮に、エックスサーバーのSSHのログインのユーザ名が 「shiz」、サーバー名が「shiz.xsrv.jp」とすると、以下のようなコマンドでログインできます。
「-i」オプションで鍵のファイル名を指定します。標準的な「~/.ssh/id_rsa」に鍵がある場合は、「-i」オプションの指定は不要です。
「-l」オプションはエックスサーバーのログインアカウント、「-p」オプションでポート番号を指定します。
ログインアカウントは以下の例では、仮に「shiz」でログインするものとします。
$ ssh -i ~/.ssh/shiz.key -l shiz -p 10022 shiz.xsrv.jp
SSH設定ができたらsshfsでマウント
Linuxならファイルシステム上に、ネットワーク上のドライブが"マウント"できてしまいます。SSH設定ができてしまうと、FUSEの仕組みを利用した、sshfsというツールでマウントができます。これがとても便利。
“マウント"という仕組みに関して少し解説しましょう。
もともと、マウントは、新しい物理HDDのようなディスクをシステムに追加する時に使うおまじないでした。しかし、時代が進んで、物理的なディスクだけではなく、ネットワーク経由で他のマシンのデータをあたかも手元のHDDと同じような使用感で使えるようにするための仕組みが登場します。
マウントするためのネットワークのプロトコルは、さまざまなものが選択できます。これを可能にするのが、Virtual File Systemをマウントするための、FUSE(Filesytem in Userspace)という仕組みです。ファイルシステムというのは元々は、LinuxなどのOSのカーネルと呼ばれるシステムの中心のそれまた中心くらいのプログラムで用意されているもの。カーネルは一般ユーザプログラムとは別の権限で実行されますので、とても’えらい’プログラムなのです。
しかし、一般ユーザーが一々他のシステムのファイルシステムをマウントするために特権レベルの権限を必要とするのは不便です。そこで、FUSEのような仕組みが考えられたのです。
話が飛びましたが、sshfsに話を戻します。
エックスサーバーでsshfsを使うには、上記のSSH設定で説明しましたが、以下のポイントに注意が必要です。
- SSHサーバーのポート番号が一般的な22番ではなく、10022番
- ユーザ名はエックスサーバーのユーザ名なので、(通常)ローカルのUbuntuユーザ名と異なる
- 秘密鍵はエックスサーバーで生成したものをダウンロードして使う
という状況ですので、sshfsを使う場合には、オプションでそれらを細かに設定してあげます。
それでは、マウントしてみましょう。
最初に、マウントポイントとなるディレクトリを自分のLocal のマシンに作成します。
$ mkdir x-server
このディレクトリにエックスサーバーのディレクトリを「マウント」できると、エックスサーバーのディレクトリ以下のファイルが全てこのx-serverというディレクトリの下にあるように見えるようになります。
sshfsを実行します。
注意点1のポート番号は、「-p」オプションで指定します。
注意点2のユーザ名は、サーバーの名前の前に「@」マークで区切って指定します。例えば、エックスサーバーのユーザー名がusernameで、サーバーの名前がservername の場合は、「username@servername」のような指定になります。
注意点3のSSHの秘密鍵ですが、通常デフォルトでは「~/.ssh/id_rsa」から読み取ります。私の場合はデフォルトは別の用途に使っていたので、「~/.ssh/shiz.key」に置くことにしました。デフォルトと異なる秘密鍵を指定する方法は、「-o」 オプションに「IdentitiyFile=」でファイル名を指定します。
仮に、エックスサーバーのSSHのログインのユーザ名が 「shiz」、サーバー名が「shiz.xsrv.jp」とすると、以下のようなコマンドでマウントできます。
$ sshfs shiz@shiz.xsrv.jp:/home/shiz ~/x-server -p 10022 -o IdentityFile=~/.ssh/shiz.key
マウントが正しくできると、マウントポイント「x-server」に移動して、ファイルをリストすると、あら不思議。サーバーのフォルダが見えるようになりました。
まとめ
レンタルサーバーのサーバーにあるファイルを読み書きするには、FTPプロトコルを使う方法が一般的。しかし、エックスサーバーのようにSSH接続が用意されている場合は、SSHを使って暗号化した状態でファイルを直接読み書きする技が使えます。Ubuntuでsshfsを使うとローカルのディレクトリにサーバー上のファイルがマウントできるので、便利です。