NBTなネットワークへCLIで Samba編

Windowsの共有に対して、*NIXから接続したいことは結構ある。いくつかメモしておく。

NetBIOS名の解決やシェア名の取得

nmblookupを使う(Sambaに含まれる)

IPアドレスからNetBIOS名を引くには、以下のようにする。

  hostA# nmblookup -A 192.168.X.X
  params.c:pm_process() - Processing configuration file "/usr/local/etc/smb.conf"
  Processing section "[global]"
  added interface ip=192.168.X.X bcast=192.168.X.255 nmask=255.255.255.0
  Socket opened.
  Looking up status of 192.168.X.Y
          DATA1            <00> -         B <ACTIVE>
          DATA1            <03> -         B <ACTIVE>
          DATA1            <20> -         B <ACTIVE>
          DOC              <00> - <GROUP> B <ACTIVE>
          DOC              <1e> - <GROUP> B <ACTIVE>
  
          MAC Address = 00-00-00-00-00-00

ふつーにNetBIOS名からIPアドレスを引くなら、単純に引数として渡すだけでOK。

  hostA# nmblookup data1
  params.c:pm_process() - Processing configuration file "/usr/local/etc/smb.conf"
  Processing section "[global]"
  added interface ip=192.168.X.X bcast=192.168.X.255 nmask=255.255.255.0
  Socket opened.
  querying data1 on 192.168.X.255
  Got a positive name query response from 192.168.X.2 ( 192.168.X.2 )
  192.168.X.2 data1<00>

シェアの一覧とシェアへの接続

NetBIOS名かIPアドレスがわかれば、接続できる。

hostA# smbclient -N -L data1
Domain=[DATA1] OS=[Unix] Server=[Samba 3.0.x]

        Sharename       Type      Comment
        ---------       ----      -------
        strage1         Disk      somethings
        strage2         Disk      somethings
        IPC$            IPC       IPC Service (SRV)

実際に接続したいシェアがわかれば、あとは接続して操作できる。

hostA# smbclient -N //data1/strage1
Domain=[DATA1] OS=[Unix] Server=[Samba 3.0.x]
smb: \> ls
  .                                   D        0  Wed Dec 24 20:01:55 2008
  ..                                  D        0  Wed Dec 24 20:01:59 2008
  somedata.txt                                28  Thu Nov  1 14:03:36 2007
  stock1                              D        0  Wed Dec 24 19:44:31 2008
  stock2                              D        0  Wed Dec 24 19:44:31 2008
  Document                            D        0  Wed Dec 24 20:01:57 2008
                57742 blocks of size 4194304. 19141 blocks available

このとき、環境変数 USER があれば、それがユーザー名として使われる。が、普通は設定してないだろうから、GUESTとしてログオンすることになる。もし、GUESTではなくて、特定のユーザー名とパスワードを使用する場合には、-U オプションを使うべし。

hostA# smbclient -U interplinker //data1/strage1
Password:
Domain=[DATA1] OS=[Unix] Server=[Samba 3.0.x]
smb: \>

パスワードを空にすると、GUEST扱いになる。

hostA# smbclient -U interplinker //data1/strage1
Password:
Anonymous login successful
Domain=[DOC] OS=[Unix] Server=[Samba 3.0.x]

パスワードが違うとこうなる。

hostA# smbclient -U interplinker //data1/strage1
Password:
session setup failed: NT_STATUS_LOGON_FAILURE

smbclientので使えるコマンドは、割とftpコマンドと似ていて、ls/put/mput/get/mget/rm/rmdirが使える。操作の詳細は、smbclientを参照。