サーバ上のディレクトリをローカルにマウントするsshfsの使い方
はじめに
Linuxでは、サーバ側のディレクトリを自身のローカルPCにマウントして、ローカル上のディレクトリして使用することができるコsshfsというマンドが用意されています。名前の通りssh
を使います。ここではこのsshfs
のUbuntuでの使い方をメモします。
できるようになること
以下のように、サーバ上のディレクトリをUbuntuのローカルのディレクトリとしてマウントすることができるようになります。
以下のようにローカルのディレクトリのようにアクセスすることができます。もちろんコマンドでのファイル操作も可能です。
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
正常にマウントされると、以下のように外部ディスクとして表示されます。
以上が簡単な使い方になります。以降に秘密鍵を使った場合の使い方を載せます。
秘密鍵を指定して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
コマンドで終了します。ps
、kill
コマンドのオプションについては参考サイト様をご参照ください。
$ 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クライアント等を使う必要がなく便利です。
関連記事
- 公開日:2022/09/11 更新日:2022/09/11
Google Compute EngineのインスタンスにSSH接続できなくなった時の対処方法
Google Compute EngineのインスタンスにSSH接続できていたのにSSHの設定ミスや原因不明でSSH接続できなくなった時の対処方法をメモします。自分のPCからだけでなく、Google Cloud Platform上での管理画面からもSSHできない場合にも有効です。
- 公開日:2022/09/08 更新日:2022/09/08
Google Compute EngineのインスタンスにSSH接続する
Google Compute Engineのインスタンスにssh接続するための手順をまとめます。
- 公開日:2018/02/10 更新日:2018/02/10
CentOSでrootのときだけ日本語が文字化けする時の原因と対処方法
さくらVPSでCentOSを使いはじめたところ、一般ユーザで使用している時はvimなどのエディタで編集していても日本語が問題なく表示されていましたが、root権限で同様に編集のためにファイルを開いたら日本語が文字化けしてしまいました。以降ではこの原因と対処方法についてメモします。
- 公開日:2017/08/27 更新日:2017/08/27
MacでubuntuのインストールUSBを作成する方法と手順
MacでubuntuのインストールUSBを作成する手順をメモします。ここで載せる手順はターミナルでのコマンドによる方法になります。