同一クライアント上において複数ユーザで次々にsambaに接続するのは難しい

Windows上のあるファイルを、samba経由でUNIXの複数のユーザのホームディレクトリにコピーするバッチファイルを作りたいとする。どうするか。

net useを使い、ユーザAで接続してコピー、次はユーザBで接続してコピー、。。。と処理を続けるバッチファイルを作ればOKな気がするが、そうはいかない。このバッチファイルは、2番目のユーザつまりこの例でいえばユーザBで接続しようとすると下記のエラーが出て処理が成功しない。

システム エラー 1219 が発生しました。
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。

理由は、一つのsmbクライアントはsamba(正確に言うと、sambaではなく、smbサーバなら何でも)に対して、複数のセッションを張ることが出来ないからだ。異なるユーザで接続するためには、ユーザ毎に別のセッションが必要であるためできない*1

じゃあということで、ユーザAで接続し、ファイルをコピーした後に、net use \\hoge\hoge /DELETEとかやって接続を消し、ユーザBで接続すれば良いのでは、となるが、そうはいかない。net useでdeleteしているはあくまでセッション上でリソースのやりとりをできる状態であり、セッション自身を消せるわけではないからだ。セッションの確立・開放の制御は、サーバ側にある。サーバは、クライアントからしばらく反応がなければ、セッションを解放する場合がある。なので、サーバ側のセッションの開放をクライアントからは制御できない。サーバのセッション開放を待つしかない。

では、どうすればよいか。一案としては、サーバの「しばらく反応がなければ」の「しばらく」を設定で短くすることだ。そうすると、ちょっと待てば、セッションが解放されており、別のユーザでセッションを確立することが可能になる。 sambaの場合は、その設定は、smb.confの'deadtime'の値の変更が相当する。ただ、これどうも分単位の設定なので、たとえば、1秒とかの設定はできなさそうだ。*2

というわけで、結論としては、最初の問題を解決するのは結構難しい、ということになる。

どうしたものか。

*1:接続名を変えればできるが

*2:なお、デフォルト値は'0'であり、「どんなに反応がなくてもそれを理由にはセッションを消さない」を意味する