Help us understand the problem. What is going on with this article?

新しくなったwinexe

More than 1 year has passed since last update.

winexe とは

winexe とは、Linux から Windows 上のコマンドを実行することができるツールです。
もともとSamba 4.0のソースコードをベースに開発されたツールとして sourceforgeで提供されていましたが、近年はメンテナンスが行われなくなっていました。

しかし、最近、winexeのメンテナンスが再び行われ、Sambaの開発版のソースコードにマージされました。
そこで、今回は winexe について紹介します。

winexe の仕組み

Windows Serverでは昔から psexec と呼ばれる仕組みが用意されていて、リモートからシステムにアクセスし、コマンドを実行するためのインターフェースとして利用できます。
psexecでは、WindowsサーバーのAdmin$ファイル共有にpsexesvcをコピーし、Windowsサーバー上でpsexesvcサービスとして実行することで、ローカルのコマンドとWindows上のコマンドを紐付け、リモートからのコマンド実行を可能とします。

winexeはこの仕組みを実現するために、通信部分に Sambaのライブラリなどを利用し、LinuxからWindows上のコマンド実行を可能にします。
仕組み上、Windows Serverの ファイル共有サービスが有効で、LinuxからWindows ServerのMicrosoft-DS(Microsoft Direct Hosting of SMB:445/TCP)ポートへのアクセスができる必要があります。

winexeの準備

winexeは、2018/12/1現在、Sambaの開発版のソースコードのみにマージされています。
そのため、Gitを利用して、Sambaの開発版のソースコードを取得して、コンパイルする必要があります。

$ git clone https://git.samba.org/samba.git

ちなみに、ソースコードの取得にはかなり時間がかかります...
取得が完了したら、sambaのマスターブランチを使って、ソースコードのビルドを行ないます。

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  ...

Sambaのソースコードの examples/winexe配下にwinexeのソースコードが配置されています。

# yum install epel-release
# yum update -y
# yum install gcc \
  perl \
  mingw-binutils-generic \
  mingw-filesystem-base \
  mingw32-binutils \
  mingw32-cpp \
  mingw32-crt \
  mingw32-filesystem \
  mingw32-gcc \
  mingw32-headers \
  mingw64-binutils \
  mingw64-cpp \
  mingw64-crt \
  mingw64-filesystem \
  mingw64-gcc \
  mingw64-headers \
  libcom_err-devel \
  popt-devel \
  zlib-devel \
  zlib-static \
  glibc-devel \
  glibc-static \
  python-devel \
  gnutls-devel \
  libacl-devel \
  openldap-devel \
  jansson-devel \
  lmdb-devel \
  gpgme-devel \
  libarchive-devel \
  pam-devel

ソースコードの取得と、ビルドに必要なパッケージのインストールが完了したら、いよいよSambaのビルドです。

# cd samba
# ./configure

winexeのビルドに必要なパッケージがインストールされていれば、configureが完了した時点で bin/config.log ファイル中に以下の定義が行われているはずです。

#define HAVE_WINEXE_CC_WIN32 1
#define HAVE_WINEXE_CC_WIN64 1

Sambaのビルドを行ないます。

# make

makeにはしばらく時間がかかりますが...ビルドが完了すると、bin/winexeにwinexeコマンドが作成されます。

installコマンドでSambaのバイナリのインストールを行うと、/usr/local/samba配下にインストールされ、/usr/local/samba/bin/winexe としてwinexeの利用が可能になります。

# make install

winexe の利用方法

winexe コマンドは、 対象のWindowsサーバーでWindows用のコマンドを実行することができます。

まずは簡単なところで Windows上でipconfigコマンドを実行してみます。

接続先、接続ユーザー、実行するコマンドを指定します。

# /usr/local/samba/bin/winexe -U Administrator //192.168.0.1 ipconfig
Enter password: ********  -Uオプションに指定したユーザーのパスワード

指定したユーザー・パスワードが正しければ、ipconfigコマンドの結果が表示されます。
ただし、メッセージのエンコーディングがシフトJISのためそのままでは文字化けしますので、iconvコマンドで変換して表示する必要があります。

# /usr/local/samba/bin/winexe -U Administrator //192.168.0.1 ipconfig | iconv -f cp932 -t utf-8
Enter password: *******

Windows IP 構成
イーサネット アダプター イーサネット:
....

バッチスクリプトや実行ファイルを実行する場合は、直接ファイルを指定します。

# /usr/local/samba/bin/winexe -U Administrator //192.168.0.1 "C:\scripts\test1.bat"

PowerShellスクリプトを実行する場合は、powershellコマンド経由で実行します。

# /usr/local/samba/bin/winexe -U Administrator //192.168.0.1 "powershell -Command C:\scripts\test1.ps"

winexeコマンド実行時、プロンプトから接続ユーザーのパスワード入力が求められますが、バッチ処理で利用したい場合はプロンプトからのパスワード入力を避けたい場合があります。

このような場合は認証情報として、次の内容のテキストファイルを用意し、-Aオプションにファイル名を指定することで、認証に利用することができます。 ファイル名は任意の名前で構いません。

winexe.pass

username=Administrator
password=pass123
# /usr/local/samba/bin/winexe -A winexe.pass //192.168.0.1 ipconfig

当然、このファイルにはWindows Serverの管理者アカウント情報などが含まれることになりますので、rootのみ参照可能など適切な権限で保護しましょう。

winexeコマンドを1度実行すると、Windowsサーバー上に winexesvcサービスが常駐しますが、--uninstallオプションを指定すると、コマンド終了時に winexesvcサービスも終了します。

# /usr/local/samba/bin/winexe -A winexe.pass --uninstall //192.168.0.1 ipconfig

まとめ

winexeコマンドを利用すると、Linux上からWindows上のバッチを簡単に実行できるようになります。
特別なサービスの設定なども不要ですので、ちょっとした管理作業や、定期的なコマンド実行などをLinuxから行うことも簡単になりますので、LinuxとWindows Serverの混在環境で活用してみてはいかがでしょうか。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away