2009/07/23(Thu)Sambaの一括マウントスクリプト

2009/07/23 10:33 Software::Linux
遠隔地のLAN内にあるWindows PCに対してデータを送りたい場合、これまでは一旦外部から到達できるLinuxサーバーに置いてから、そのサーバー経由でPortForwardしたリモートデスクトップやVNC移動という面倒なことをしていた。

遠隔地上の同一LAN内の転送速度はわりかし速いにしても、転送操作が2回あるので面倒…。
WindowsにSFTPサーバーを立てるのも設定が難しかったり、文字化けしてUTF-8な通信ができなかったり、結局PortForwardが必要になるなど、面倒だった。

というわけで、外部から到達できるLinuxサーバーにSambaマウントするという方法を試してみた。

結果から言うと、やはりSambaは文字コードの設定にしてもやりやすく、問題なくあっさりマウントできて楽だった。外部からアクセスできるLinuxサーバーは公開鍵認証しているので、インターネット越しでも安全なアクセスとなっている。


しかし、その時打ったmountコマンドがなかなか長かった上、いくつもマウントしたかったので、ちょっとシェルスクリプトを書いてみた。
DRVSに管理共有しているコンピュータ名/ドライブレターをスペース区切りで書き、スクリプト起動後にパスワードを打てばよい。
ユーザー名の部分は適宜変更のこと。
#!/bin/sh
DRVS="win1/C win1/D win2/C win2/D win3/F"

echo "Input password to mount samba drives."
stty -echo
read password
stty echo

for drv in ${DRVS}; do
    if [ ! -e /mnt/${drv} ]; then
        mkdir -p /mnt/${drv}
    fi
    if [ `mount | grep ${drv} | wc -l` -ne 0 ]; then
        umount /mnt/${drv}
    fi
    printf "mounting //%-20s" "${drv}\$..."
    mount -t cifs -o username=kero,password=${password} //${drv}\$ /mnt/${drv} >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -e "[  \e[32mO K\e[0m  ]"
    else
        echo -e "[  \e[31mN G\e[0m  ]"
    fi
done
別に大したことはしていないけど、色々シェル周りの勉強になった。
  • sttyでパスワード入力のエコーバックを制御してみた
  • bashでのprintfを試してみた
  • OKやNG表示に色を付けてみた
今回Fedora上でやったのでUTF-8で日本語が化けずに表示できたが、場合によってはmountの-oオプションでcodepage=utf8,iocharset=utf8などを付けてみるといいかもしれない。