web-dev-qa-db-ja.com

ログイン/起動時にリモートディレクトリを自動的にマウントする方法

起動するたびに、sshfsを使用してリモートディレクトリをマウントします。これらの短いコマンドを.bashrcに入れることを考えていますが、それはTheRightWay™ではないようです。

ログイン時にsshfsを実行する適切な方法は何ですか?

4
Framester

確かに、 .bashrcは正しくありません 。そのファイルは、インタラクティブシェルを実行しているターミナルを開くときに読み取られます(シェルがbashの場合)。

起動時にsshfsマウントを実行できますが、これは対話型認証が必要ない場合にのみ機能します。ほとんどのセットアップでは、これはパスワードなしのキーを意味します。 (他の方法もありますが、それらは通常、NFSのようなものがすでにある信頼できるネットワーク内でのみ適用されます。)

  • Rootの場合、エントリを /etc/fstab に追加できます。これは、ルートの~/.sshを使用してキーと既知のホストを検索することに注意してください。

    example.com:/remote/path /mount/point Fuse.sshfs idmap=user,uid=1234
    
  • @rebootcrontabエントリ を入力できます。

    @reboot sshfs -o idmap=user example.com:/remote/path /mount/point
    

リモートサーバーに送信するためにパスワードを入力する必要がある場合は、最初にログインしてユーザーインターフェイスを使用できるようにする必要があります。キーをロック解除するためにパスワードを入力する必要がある場合も同様です。

ほとんどのウィンドウマネージャーとデスクトップ環境では、ログイン時にカスタムコマンドを実行できます。次のようなスニペットを実行できます(環境が既にSSHエージェントを開始していると仮定します。ほとんどの場合、最近実行されます)。

SSH_ASKPASS=ssh-askpass ssh-add ~/.ssh/id_rsa
mount | grep ' /mount/point ' ||
sshfs -o idmap=user example.com:/remote/path /mount/point

mount | grep ' /mount/point ' ||は、複数の方法でログインした場合に、ファイルシステムがすでにマウントされているように見えるかどうかを確認します。または、エージェントを使用しない場合:

mount | grep ' /mount/point ' ||
SSH_ASKPASS=ssh-askpass sshfs -o idmap=user example.com:/remote/path /mount/point

ssh-askpassプログラムがない場合、別の方法は、マウントを行うためだけにターミナルを開くことです。

xterm -e 'ssh-add ~/.ssh/id_rsa'
mount | grep ' /mount/point ' ||
sshfs -o idmap=user example.com:/remote/path /mount/point

テキストモードでログインするには、ssh-add~/.profileに入れます。シェルがインタラクティブである場合にのみ実行してください。

case $- in
  *i*)
    ssh-add ~/.ssh/id_rsa
    ;;
esac
sshfs -o idmap=user example.com:/remote/path /mount/point

ブート時にファイルシステムをマウントする場合は、それらを/etc/fstab。以下はOpenBSDのドキュメントの例です。リモートサーバーのNFSストレージでは、これを定期的に行っています。

10.0.0.1:/work /mnt nfs rw 0 0

その形式はうまく機能します。あなたのIPそしてあなたがマウントしたいディレクトリ。そして、それをリモートサーバーのどこにマウントするか。 fstabは、マウント時にそれを行うための最良の方法です。または、起動時に実行できる小さなスクリプトを用意することもできます。

0
William Fleming

このユースケースでは、私は快適に afuse、Fuseベースのsshfsオートマウンターを使用します[1]

systemd のディストリビューションでは、afuseuserサービスユニットファイル ここの別の質問に投稿されているもののように を簡単に使用できます。

(re-)spawn afuseシェルスクリプトの数行の簡単な行)[2]~/.profile

[1]:afuseは、Linuxのほとんどのディストリビューションのパッケージマネージャーで使用できます。

[2]:このリンクされたスクリプトは私の このセットアップをsystemdユーザーサービスに変えることについての質問 からのものです。

0
Alex Stragies