サーバ上のディレクトリをローカルにマウントするsshfsの使い方

公開日:2017/12/09 更新日:2017/12/09
サーバ上のディレクトリをローカルにマウントするsshfsの使い方のサムネイル

はじめに

Linuxでは、サーバ側のディレクトリを自身のローカルPCにマウントして、ローカル上のディレクトリして使用することができるコsshfsというマンドが用意されています。名前の通りsshを使います。ここではこのsshfsのUbuntuでの使い方をメモします。

できるようになること

以下のように、サーバ上のディレクトリをUbuntuのローカルのディレクトリとしてマウントすることができるようになります。

after-mounted-mod2.png

以下のようにローカルのディレクトリのようにアクセスすることができます。もちろんコマンドでのファイル操作も可能です。

remote-server-dir-mod.png

sshfsをインストール

以下のコマンドを実行してインストールは完了です。

$ sudo apt-get update
$ sudo apt-get install sshfs

ローカルにマウントポイントとなるディレクトリを作成

今回はホームディレクトリにremote-serverというディレクトリを作成し、ここにサーバ上のディレクトリをマウントします。以下のようにcdに引数を渡さずに実行すればホームディレクトリに移動します。

$ cd
$ mkdir remote-server

マウントする

後は実際にsshfsコマンドでマウントします。 なお、以降では例として以下をssh接続のために使う情報とします。

  • ssh接続に必要なユーザ名: sshuser
  • 接続先となるサーバIP: 192.168.1.1
  • ローカルのマウントポイントとなるディレクトリ名: remote-server(上記で作成したディレクトリ)

一番簡単な使い方としては以下になります。

$ sshfs ユーザ名@ホスト名(もしくはIPアドレス):サーバ上のパス マウントポイント

よって以下を実行するとサーバ上でのルートディレクトリがローカルのremote-serverにマウントされます。

$ sshfs sshuser@192.168.1.1:/ ~/remote-server

サーバ上の/home/user1というディレクトリをローカルのremote-serverにマウントしたい場合は、以下のコマンドになります。

$ sshfs sshuser@192.168.1.1:/home/user1 ~/remote-server

正常にマウントされると、以下のように外部ディスクとして表示されます。

after-mounted-mod2.png

以上が簡単な使い方になります。以降に秘密鍵を使った場合の使い方を載せます。

秘密鍵を指定してssh接続してマウントする

秘密鍵を指定してssh接続してマウントする場合は、以下のようになります。見て分かるように-o IdentityFile=ローカルの秘密鍵のパスというオプションで使用する秘密鍵を指定しています。

$ sshfs ユーザ名@ホスト名(もしくはIPアドレス):サーバ上のパス マウントポイント -o IdentityFile=ローカルの秘密鍵のパス

ローカルの~/.ssh/id_rsa.keyを秘密鍵として使いたい場合は以下になります。

$ sshfs sshuser@192.168.1.1:/ ~/remote-server -o IdentityFile=~/.ssh/id_rsa.key

ポート番号を指定したい場合は、-p ポート番号オプションを使います。以下の例ではssh接続で使用するポート番号として10022を指定しています。

$ sshfs sshuser@192.168.1.1:/ ~/remote-server -p 10022 -o IdentityFile=~/.ssh/id_rsa.key

秘密鍵指定、ポート番号指定、サーバ上の/home/user1というディレクトリをマウントする場合は、以下のコマンドになります。

$ sshfs sshuser@192.168.1.1:/home/user1 ~/remote-server -p 10022 -o IdentityFile=~/.ssh/id_rsa.key

最後に、~/.ssh/configに記載された接続情報を使ってssh接続してマウントする場合を説明します。

~/.ssh/configの設定ファイルにある情報を使ってssh接続してマウントする

sshでサーバに接続する時に、sshの設定ファイルである~/.ssh/configに記載の情報を使って接続することも多いと思います。 例えば、~/.ssh/configに以下の内容が記載されているとします。

Host remotesvr
HostName 192.168.1.1
Port 10022
IdentityFile ~/.ssh/id_rsa.key
User username

この~/.ssh/configに記載の情報を使用してsshfsを使うには、以下のようにします。

$ sshfs configに記載のホスト名:サーバ上のパス マウントポイント

以下は~/.ssh/configに記載のremotesvrサーバのルートディレクトリをremote-serverにマウントします。

$ sshfs remotesvr:/ ~/remote-server

他の例と同様に、サーバ上の/home/user1をマウントしたい場合は以下になります。

$ sshfs remotesvr:/home/user1 ~/remote-server

アンマウントする

以下のumountコマンドでアンマウントできます。なお、root権限である必要があります。

$ sudo umount remote-server

なお、マウントした状態でネットワーク接続が切断され、ssh接続も切断されると、umountしても以下の様なエラーが表示されます。

umount: remote-server: target is busy
        (In some cases useful info about processes that
         use the device is found by lsof(8) or fuser(1).)

この場合は、まずpsコマンドでsshfsのプロセス番号を確認し、それをkillコマンドで終了します。pskillコマンドのオプションについては参考サイト様をご参照ください。

$ ps ax | grep sshfs
5610 ?        Ssl   19:42 sshfs online:/ /home/username/remote-server/
20599 pts/2    S+     0:00 grep --color=auto sshfs

$ kill -9 5610

なお、killしただけではすでにssh接続が切断されているのにマウントされた状態になってしまっており、この状態で例えば以下のようにcdでアクセスしようとすると、以下のようなエラーが表示されます。そのため、最後に改めてumountを実行する必要があります。

$ cd remote-server
bash: cd: remote-server: 通信端点が接続されていません

最後にumountに強制アンマウントのための-fオプションをつけてroot権限で実行します。

$ sudo umount -f /home/username/remote-server
【 ps 】 実行中のプロセスを表示する | ITPRO 【 kill 】 プロセスおよびジョブを強制終了する | ITPRO

まとめ

sshfsによってサーバ上でのディレクトリをでローカルディレクトリと同じように使えると、いちいちFTPクライアント等を使う必要がなく便利です。

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。