ゲストアクセスを許可しているSMB共有は、mount_smbfs -Nでダイアログなしにマウントできる。Finderの「サーバへ接続」やopen smb://...でマウントすると、認証ダイアログの表示を伴う場合もある。スクリプトから自動でマウントするなら、mount_smbfsが向いている。
$ mkdir -p ~/mnt/share
$ mount_smbfs -N '//GUEST:@nas.local/share' ~/mnt/share
$ ls ~/mnt/share
hello.txt
マウントポイントは、あらかじめ作成しておく。共有の内容が~/mnt/share以下に表示される。実行例はmacOS 27.0.1のもの。接続先はnas.local、共有名はshareとする。
アンマウントはdiskutil unmountで実行する。
$ diskutil unmount ~/mnt/share
Unmount successful for /Users/[ユーザー名]/mnt/share
参考: 【macOS】pingは通るのにSMB共有をマウントできない原因を切り分ける
ユーザー名にGUESTを指定する理由
接続先の形式は、//[ユーザー名]:[パスワード]@[サーバー]/[共有名]である。ゲストとして接続するには、ユーザー名をGUEST、パスワードを空にする。
$ mount_smbfs -N '//GUEST:@nas.local/share' ~/mnt/share
-Nは、パスワードの入力を求めないオプションである。-Nだけを指定して、ユーザー名を省略すると、現在のユーザー名で、パスワードなしの認証を試みる。ゲストとしては接続されず、認証エラーで失敗する。
$ mount_smbfs -N '//nas.local/share' ~/mnt/share
mount_smbfs: server rejected the connection: Authentication error
GUEST:@の:は省略できない。ユーザー名とパスワードの区切りである:の後ろが、空のパスワードになる。
パスワードに記号を含む場合に備えて、接続先全体をシングルクォートで囲む。
マウント状態を確認する
mountの出力で、マウントされた共有を確認できる。
$ mount | grep smbfs
//GUEST:@nas.local/share on /Users/[ユーザー名]/mnt/share (smbfs, nodev, nosuid, noowners, mounted by [ユーザー名])
mount_smbfsでGUESTとしてマウントした共有は、//GUEST:@...の形式で表示される。
スクリプトでは、マウント済みかどうかをmountの出力で判定すると扱いやすい。
if mount | grep -q " on $HOME/mnt/share "; then
echo "mounted"
fi
ユーザー名とパスワードを指定してマウントする
認証が必要な共有には、接続先にユーザー名とパスワードを含める。
$ mount_smbfs '//[ユーザー名]:[パスワード]@nas.local/private' ~/mnt/private
パスワードがコマンドラインに残る。シェルの履歴や、psの出力から読み取られるため、共有のテスト用のアカウントなどに限る。
アンマウントする
diskutil unmountのほか、umountでもアンマウントできる。
$ umount ~/mnt/share
共有の中のディレクトリをカレントディレクトリにしているシェルなど、共有を使用中のプロセスがあると、diskutil unmountは失敗する。
$ cd ~/mnt/share
$ diskutil unmount ~/mnt/share
Unmount failed for /Users/[ユーザー名]/mnt/share
共有の外にカレントディレクトリを移動してから、再度アンマウントする。
エラーが出る場合
| エラー | 原因 |
|---|---|
could not find mount point ...: No such file or directory | マウントポイントのディレクトリがない。mkdir -pで作成する |
mount error: ...: No such file or directory | 指定した共有名が、サーバーにない。ゲストアクセスを許可していない共有にGUESTで接続した場合も、同じエラーになる |
mount error: ...: File exists | 同じ共有が、すでに別のパスにマウントされている |
server rejected the connection: Authentication error | ゲストでの接続なのにユーザー名にGUESTを指定していない、あるいはユーザー名やパスワードが誤っている |
同じ共有を別のパスにマウントできない
同じサーバーの同じ共有は、同時に1か所にしかマウントできない。すでにマウントされていると、別のパスへのマウントはFile existsで失敗する。
$ mount_smbfs -N '//GUEST:@nas.local/share' ~/mnt/share
$ mount_smbfs -N '//GUEST:@nas.local/share' ~/mnt/share2
mount_smbfs: mount error: //GUEST:@nas.local/share: File exists
マウント先を変えたい場合は、先にアンマウントする。
認証ダイアログが表示される場合
open smb://...でマウントすると、認証ダイアログの表示を伴う場合もある。AppleScriptを使えば、ダイアログの「接続」ボタンを自動で押せる。
参考: 【osascript】SMB認証ダイアログの「接続」ボタンを自動でクリックする
