Mac OSXでの起動時にsshfsフォルダーをマウントしたい:現在Macfusionを使用しています。これはMacFUSEのGUIですが、フォルダーを手動でマウントする必要があります。
どうすればそれを達成できますか?
リモートマシンを保守している場合は、そのマシンのファイルシステムをローカルにマウントしてファイルを移動すると非常に便利です。 MacFuseとsshfs
を使用すると、これは非常に簡単になりますが、ログイン時に自動的にセットアップしてマウントするのは少し難しい場合があります。
まず、パスワードを入力せずにリモートマシンにSSH接続できることを確認します。 Leopardは最終的にログイン時にssh-agentをサポートします でセットアップを行い、それが機能することを確認します。
ssh USER@HOSTNAME:
パスワードやパスキーの入力を求めずにログインした場合は、続行する準備ができています。
次に、sshfs
とMacFuseを OS X Leopard10.5.5にMacFuse1.7を使用してsshfs1.9をインストールする に従ってインストールします。
リモートボリュームをマウントする場所を見つけます。 /Volumes
を使用することはお勧めしません。マウントを解除すると、OSXがそこにあるディレクトリを自動的に削除するように見えるからです。代わりに/mnt/HOSTNAME
を使用しました
mkdir -p/mnt /ホスト名
(明らかに、HOSTNAME
をリモートサーバーの名前に置き換えます。)
次に、sshfs
を使用してパスワードを指定せずに、リモートサイトをボリュームとしてマウントできることを確認します。
sshfs USER@HOSTNAME:PATH /mnt/HOSTNAME -oreconnect,allow_other,volname=VOLUME_NAME
VOLUME_NAMEを、Finderでボリュームに名前を付ける任意の名前に設定します。 HOSTNAMEを使用しました。 PATHはオプションです。リモートホストにマウントするディレクトリに設定します。設定されていない場合は、ホームディレクトリが使用されます。
エラーメッセージが表示されず、ls /mnt/HOSTNAME
を実行すると、リモートファイルが表示されたら、次の手順に進む準備ができています。
マウントしたばかりのボリュームをアンマウントします。
umount/mnt /ホスト名
トリッキーなパーティーがやってきました。ログイン時にボリュームをマウントするには、LaunchAgentアイテムを作成する必要があります。これ自体は非常に簡単です。ただし、システムが私のようなものである場合、このアイテムにはSSH_AUTH_SOCKが適切に設定されていないため、パスワードを使用せずにリモートホストにログインすることはできません。 SSH_AUTH_SOCKを自分で手動で設定する必要があります。
まず、SSH_AUTH_SOCKを設定するsshfs
のラッパーを作成します。これをファイルに入れてください。 /opt/local/bin/sshfs-authsock
をお勧めします。
#!/bin/bash
export SSH_AUTH_SOCK=$(ls -t /tmp/launch-*/Listeners | head -1)
/opt/local/bin/sshfs $*
基本的に、このファイルはSSH_AUTH_SOCKをtmpディレクトリ内の最新のソケットに設定します。ほとんどの場合、これは適切なものである必要があります。失敗する可能性は低く、失敗してもセキュリティ上の問題はありません。
これで、launchdplistファイルを最終的に作成できます。これを入れて
~/Library/LaunchAgents/BACKWARDS_Host_DNS.PATH.sshfs.plist
(たとえば、ホストのパスがfoo.niskala.org
で、PATHが/tmp
の場合、結果のファイル名はorg.niskala.foo.tmp.sshfs.plist
になります。これは単なる慣例です。ファイルには、自由に名前を付けてください。本当に欲しいですが、.plist
で終わる必要があります。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>BACKWARDS_Host_DNS.PATH.sshfs</string>
<key>ProgramArguments</key>
<array>
<string>/opt/local/bin/sshfs-authsock</string>
<string>USER@HOSTNAME:</string>
<string>/mnt/HOSTNAME</string>
<string>-oreconnect,allow_other,volname=VOLUME_NAME</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
次に、plistファイルをロードして実行し、機能するかどうかを確認します。
launchctl load ~/Library/LaunchAgents/BACKWARDS_Host_DNS.PATH.sshfs
launchctl start BACKWARDS_Host_DNS.PATH.sshfs
エラーメッセージが表示されない場合は、ボリュームが正しくマウントされているかどうかを確認してください。
ls/mnt /ホスト名
リモートファイルが表示されたら、すばらしいです。完了です。
そうでない場合は、
launchctl unload ~/Library/LaunchAgents/BACKWARDS_Host_DNS.PATH.sshfs
ファイルを編集する前にアンロードし、ps auxwww | grep sshfs
およびkill
を使用して、sshfs
プロセスを見つけて強制終了してから、再試行します。
参照:
Dag729からの素晴らしい答えを更新したいと思います。 El Captain OSXとOSX Fuse 2.8.3では、状況が少し異なります。
-f
オプションを使用してフォアグラウンドモードで強制的に実行する必要がありますSSH_AUTH_SOCK
はすでに定義されているため、sshfs-authsock
スクリプトを作成する理由はもうありません。また、(セキュリティ上の理由から)allow_other
オプションを使用せず、便利に思えるという理由だけでauto_cache
オプションを使用することをお勧めします。詳細については、 OS Xヒューズマウントオプション を確認してください。
これが私が使用する~/Library/LaunchAgents/NAME.sshfs.plist
ファイルです:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>NAME.sshfs</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/sshfs</string>
<string>[USER@]Host:REMOTE_DIR</string>
<string>MOUNT_DIR</string>
<string>-oreconnect,auto_cache,volname=Finder_VOLUME_NAME</string>
<string>-f</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
ここで、NAME
は好きな名前で、残りの変数は非常にわかりやすいものです。
何らかの理由でSSH_AUTH_SOCK
が定義されていない場合(コマンドlaunchctl getenv SSH_AUTH_SOCK
を実行して確認します)、次の内容の/usr/local/bin/sshfs-authsock
などのヘルパースクリプトを作成します。
#!/bin/bash
export SSH_AUTH_SOCK=$(ls -t /tmp/com.Apple.launchd.*/Listeners | head -1)
/usr/local/bin/sshfs $*
そして、plistファイルからsshfs
の代わりにこのスクリプトを実行します。したがって、~/Library/LaunchAgents/NAME.sshfs.plist
は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>NAME.sshfs</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/sshfs-authsock</string>
<string>[USER@]Host:REMOTE_DIR</string>
<string>MOUNT_DIR</string>
<string>-oreconnect,auto_cache,volname=Finder_VOLUME_NAME</string>
<string>-f</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Dag729の非常に完全な答えに何かを追加したいと思います。
Lionを使用していて、古いMacFuseの代わりに OS X Fuse を使用している場合、sshfsのパスが異なるため、上記の手順はそのままでは機能しません。
その場合は、を使用してインストール内のsshfsがどこにあるかを確認してください。
which sshfs
そして、thatパスを/ opt/local/bin/sshfs-authsockスクリプトに入れます。
私のインストールでは、そのパスは/ usr/local/bin/sshfsであるため、スクリプトは次のようになります。
#!/bin/bash
export SSH_AUTH_SOCK=$( ls -t /tmp/launch-*/Listeners | head -1)
/usr/local/bin/sshfs $*
残りはまだ有効であることが確認できます。