SSHFS(SSHファイルシステム)は、クライアントがSSH接続を介してリモートファイルシステムをマウントできるようにするユーザースペース内のファイルシステム(FUSE)の実装です。 SSHFSはSSHファイル転送プロトコル(SFTP)を使用して、リモートファイルシステムをクライアントマシンにマウントし、クライアントとサーバー間の接続は安全で暗号化されています。
SSHFSは、従来のFTPプロトコルの代わりに使用できます。デフォルトではSSH接続で安全であり、追加のパッケージや構成は必要ありません。 SSHFSは、単純なデフォルトのSSH構成で機能します。
このチュートリアルでは、2台のLinuxマシン(クライアントとサーバー)間でSSHFSを使用して安全な方法でリモートディレクトリをマウントする方法を学習します。このガイドには、ユーザーが他のユーザーのディレクトリにアクセスできないようにするSSHFSでchrootを設定する方法も含まれています。
このガイドに従うには、2台のLinuxマシン、クライアント、およびサーバーが必要です。任意のLinuxディストリビューションを使用でき、サーバーにOpenSSHサーバーがインストールされていること、およびsudoroot権限を持つ非rootユーザーがいることを確認してください。
デフォルトでは、 SSHFS パッケージは、Debian / Ubuntu、RHEL / CentOS / Rocky、ArchLinux/Manjaroを含むほとんどのLinuxディストリビューションで利用できます。システムパッケージマネージャーを使用して簡単にインストールできます。このセクションでは、ローカル/クライアントマシンにSSHFSをインストールします。
まず、次のコマンドを実行して、パッケージインデックスリストを更新します。
# For Debian/Ubuntu
sudo apt update
# For RHEL/CentOS/RockyLinux
sudo dnf check-update
# For ArchLinux/Manjaro
sudo pacman -Syu
パッケージインデックスが更新されたら、以下のようにパッケージマネージャーを使用してSSHFSパッケージをインストールします。 DebianおよびArchlinuxディストリビューションでは、パッケージの名前は' sshfs 'ですが、RHELベースのディストリビューションでは、パッケージは' fuse-sshfsと呼ばれます。 '。
# For Debian/Ubuntu
sudo apt install sshfs
# For RHEL/CentOS/RockyLinux
sudo dnf install fuse-sshfs
# For ArchLinux/Manjaro
sudo pacman -S sshfs
これで、ローカルマシンへのSSHFSパッケージのインストールが完了しました。次に、SSHFSコマンドを使用してリモートディレクトリ/パーティションをローカルマシンにマウントおよびアンマウントするための基本的なコマンドを学習します。
基本:SSHFSを使用したマウントとアンマウント
SSHFSコマンドを開始する前に、OpenSSHがインストールされたLinuxサーバーが有効になっていることを確認してください。サーバーへのユーザー認証には、SSHパスワードベースの認証またはSSHキーベースの認証を使用できます。ただし、パスワードベースの認証よりも安全なSSHキーベースの認証の使用を検討することもできます。
このセクションでは、サーバーからローカル/クライアントマシンにリモートディレクトリ/パーティションをマウントするための「sshfs」の基本的なコマンドを学習します。また、ローカルマシンからsshfsをアンマウントする方法も学習します。
1.' sshfsの基本コマンド 'SSHプロトコルを介してローカルマシンにディレクトリをマウントする場合は以下のとおりです。
sshfs [email protected]:/remote/directory /local/directory
実際には、リモートディレクトリ' / srv / dataをマウントします 'サーバーから'172.16.1.10 'ローカルマシンディレクトリへ'〜/ data '。この例では、SSHユーザー「johndoe」を使用しています。
sshfs [email protected]:/srv/data ~/data
SSHにパスワードベースの認証を使用している場合は、パスワード認証の入力を求められます。
確認するには、ディレクトリ'〜/ dataに対して'ls'コマンドを実行します。 'ローカルマシン上。
ls -lah ~/data
ローカルマシン上のリモートサーバーからのファイルのリストが表示されます。
2.ここで、ローカルマシンからリモートディレクトリをアンマウントするには、コマンド' fusermountを実行します。 ' 以下のように。このコマンドは、FUSEファイルシステムをマウントおよびアンマウントするために使用されます。
fusermount -u ~/data
3.' sshfsの別の例 '興味があるかもしれないコマンド。
デバッグオプション'-dを指定した'sshfs'コマンド '。 'sshfs'コマンドで問題が発生した場合は、追加のオプション'-d'を使用してください。 サーバーに接続するときにすべてのデバッグメッセージを表示します。
sshfs [email protected]:/remote/directory /local/directory -d
これで、非標準のSSHポートを使用してサーバーを実行している場合は、オプション'-p'を追加できます。 続いてSSHポート。
sshfs [email protected]:/remote/directory /local/directory -C -p 2222
オプション'-C 'は、オプション'- o Compression =yes'と同等の圧縮を有効にします。 sshコマンドで。
完全なリファレンスについては、「-help」オプションまたはSSHFSマンページを使用できます。
sshfs --help
man sshfs
SSHFSでのChrootの設定
このセクションでは、SSHFSでchrootを有効にする方法を学習します。これは、SSHサーバーを構成し、ユーザーとディレクトリを指定することで実現できます。 chroot環境はディレクトリアクセスを制限しますが、ユーザーは引き続きマウントディレクトリで読み取りと書き込みを行うことができます。
1.まず、ユーザー用に新しいchrootディレクトリを作成し、読み取りおよび書き込みアクセスを許可します。このガイドでは、新しい共有ディレクトリ'/ srv / shared'を作成してから、ユーザーごとに新しいホームディレクトリとデータディレクトリを作成します。
次のコマンドを実行して、新しいメイン共有ディレクトリ'/ srv / shared'を作成します。 所有権をユーザーとグループに変更します'root '。
mkdir -p /srv/shared
sudo chown -R root:root /srv/shared
2.次に、'/ srv / shared'の下にユーザーごとに別のディレクトリを作成します。 ディレクトリ。また、そのディレクトリの所有権をユーザーとグループの' rootに変更してください。 '。
mkdir -p /srv/shared/johndoe
sudo chown -R root:root /srv/shared/johndoe
3.次に、'データを作成します 'ユーザーホームディレクトリ内のディレクトリ'/ srv / shared / johndoe '。次に、そのディレクトリの所有権をユーザー' rootに変更します。 'およびグループ'johndoe '。最後に、グループ' johndoeを許可します 'そのディレクトリで読み書きします。
mkdir -p /srv/shared/johndoe/data
sudo chown -R root:johndoe /srv/shared/johndoe/data
sudo chmod g+rwx /srv/shared/johndoe/data
これで、リモートディレクトリ' / dataをマウントできます。 'ですが、ディレクトリ' / srv / shared / johndoe /data'と同等です。 サーバー上で。
4.ユーザーのchrootディレクトリを作成したら、SSH構成'/ etc / ssh/sshd_config'を編集する必要があります。 nanoまたはお気に入りのテキストエディタを使用して編集します。
sudo nano /etc/ssh/sshd_config
次の行をファイルに追加します。
Subsystem sftp internal-sftp>
Match User johndoe
ChrootDirectory /srv/shared/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
構成'internal-sftp 'は、SSHがSFTPサーバーとしても機能できるようにします。次に、' ChrootDirectoryを定義します 'ユーザー用'johndoe 'から'/ srv / shared /%u 'ディレクトリ。 '%u 'はユーザー名を意味します。
ファイルを保存して閉じます。
5.次に、次のコマンドを実行してSSH構成を確認し、構文エラーが発生しないことを確認します。次に、SSHサービスを再起動して、新しい構成を適用します。
sudo sshd -t
sudo systemctl restart sshd
6.ここで、クライアント/ローカルマシンに戻り、chroot環境にリモートディレクトリをマウントします。フルパスディレクトリ'/srv / shared / johndoe / data'ではなく、'/data'ディレクトリを使用する必要があります。また、「data」ディレクトリに対して読み取り、書き込み、および実行する権限があります。
sshfs [email protected]:/data ~/data
書き込みアクセスを確認するには、次のコマンドを使用してクライアントマシンに新しいファイルを作成します。
cd ~/data
echo "This file from client machine" >> another-file.md
ここで、サーバーに戻り、ディレクトリ' / srv / shared / johndoe / dataに移動します。 '、そのディレクトリで利用可能なファイルを確認します。
cd /srv/shared/johndoe/data/
ls
cat another-file.md
クライアントマシンから作成したファイルが表示されます。
このセクションでは、SSHFSユーザー用のchrootディレクトリを作成し、chrootを有効にするようにSSHサービスを構成しました。
SSHFS接続でエラーが発生した場合は、次の方法で接続のトラブルシューティングを行うことができます。
オプション'-d'でデバッグモードを使用できます 。このオプションを使用すると、シェル端末に接続のログが表示されます。
' sshfsを実行します '以下のようなデバッグモードでのコマンド。
sshfs [email protected]:/data ~/mnt -d
試すことができるもう1つの方法は、サーバーのSSHログを確認することです。 'sshfs'コマンドを使用する前に、新しいターミナルを開いてサーバーに接続し、' tailを実行します。 'コマンドを使用してSSHログサービスを確認します。
Ubuntu / Debianベースのシステムでは、SSHログは' /var/log/auth.logで入手できます。 '。また、RHEL / CentOSベースのシステムの場合、SSHログは「 / var / log/secure」で入手できます。 。
# For Ubuntu/Debian
tail -f /var/log/auth.log
# For RHEL/CentOS
tail -f /var/log/secure
おめでとうございます!これで、SSHFSを使用してサーバーからローカルマシンにリモートディレクトリをマウントする方法を学習しました。また、SSHFSでchroot環境を設定する方法、およびSSHFS接続のトラブルシューティング方法を学習しました。