Windows RDP


マクロの作り方(Windows へのRDP接続)マクロ

Tera Term マクロでリモートデスクトップ

RDP 接続とは

RDP は、リモートデスクトッププロトコル (Remote Desktop Protocol) の略で、主に Windows 間でリモートログインを行うためのプロトコル及び機能のことです。
リモートデスクトップを行う場合は、必須のプログラムになります。

RDP 接続するには

リモートアクセスをするなら、UNIX/Linux だけではなく、Windows も RDP 接続を簡易化したいものです。
というと、「ターミナルエミュレータでどうやって?」なんて聞かれることがあるんですが、Tera Term マクロだからって、他のプログラムを起動できないなんてことはないんです。

Windows のリモートデスクトップ接続に使うプログラムは 「mstsc.exe」です。
普通なら、以下のフォルダに格納されています。

%windir%\system32\mstsc.exe

これを起動してあげるだけで良いです。
Tera Term マクロには、他のアプリを起動する機能があります。

マクロ作成

利用するコマンド

Tera Term
Tera Term マクロで、他のアプリを起動するコマンドがこちらです。
コマンド説明
execアプリケーションを起動する。
expandenv環境変数文字列を展開する。

exec コマンドは何回かバージョンアップしていて、そのバージョン以降でなければ使えない機能も存在します。
今回は、バージョンに依存しない部分での利用であることに注意してください。
バージョン 4.63 以降に追加された exec のオプション wait は、mstsc での扱いに注意を要します。
; 失敗する
exec 'mstsc /v 192.0.2.0 /w 1024 /h 768 /admin' 'show' 1

; 成功する
exec 'C:\windows\sysnative\mstsc /v 192.0.2.0 /w 1024 /h 768 /admin' 'show' 1

詳細は、Tera Term ヘルプから exec を参照してください。	
Windows
Tera Term マクロが実行するコマンド/アプリがこちらです。
コマンド説明
cmdkeyMicrosoft 保存されたユーザー名とパスワードのほか、資格情報の作成、一覧表示、削除を行う。
mstscRDP 接続する。

理論的には Tera Term で管理しているアカウント情報を cmdkey で Windows に登録してしまえば、毎回のパスワード入力を回避することができてしまいます。

マクロの組み立て

まずは、そのまま起動させてみます。
exec 'C:\Windows\system32\mstsc.exe'

これだけで RDP が起動します。
ただし、D ドライブに OS をインストールしたといった、環境差分等によっては使えません。
そこで、環境変数文字列を展開する expandenv を通します。
RDP = "%windir%\system32\mstsc.exe"
expandenv RDP

exec RDP

サンプルマクロ

UNIX / Linux へリモートログインを行うマクロを流用して、次のマクロを記述しました。
テキストエディタへコピペして .ttl ファイルを作成してください。
; RDP access ttl macro.

inputbox 'ユーザ名を入力してください' 'アカウント入力'
username = inputstr

sprintf2 msg "%s でアクセスするホスト名を入力してください。" username
inputbox msg 'ホスト名入力'
hostname = inputstr

sprintf2 msg "Enter password for user %s" username
passwordbox msg 'Get password'
password = inputstr

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sprintf2 line "cmdkey /generic:TERMSRV/%s /user:%s /pass:%s" hostname username password
exec line

RDP = "%windir%\system32\mstsc.exe"
expandenv RDP

; 実行コマンドの組み立て
sprintf2 CMD "%s /v:%s" RDP hostname

exec CMD

; 接続中に登録情報を削除してしまうことがあるため、30秒待機します。
; バージョン 4.63 以降に追加された exec のオプション wait は、今回は除外しています。

pause 30

; 登録した情報の削除コマンド
sprintf2 line "cmdkey /delete:TERMSRV/%s" hostname
exec line

備考

コマンドラインオプション
mstsc は、/v の他に、以下のコマンドラインオプションを利用することができます。
> mstsc /?

RDP 接続ヘルプ
RDP 接続ヘルプ

これを文字起こししたのが、下記。
MSTSC [<接続ファイル>] [/v:<サーバー[:ポート]>] [/g:<ゲートウェイ>] [/admin] [/f[ullscreen]] [/w:<幅> /h:<高さ>] [/public] | [/span] [/multimon] [/edit "接続ファイル"] [/restrictedAdmin] [/remoteGuard] [/prompt] [/shadow:<セッション ID> [/control] [/noConsentPrompt]]

"接続ファイル" -- 接続用の .RDP ファイルの名前を指定します。

/v:<サーバー[:ポート]> -- 接続先のリモート PC を指定します。

/g:<ゲートウェイ> -- 接続に使用する RD ゲートウェイ サーバーを指定します。このパラメーターは、エンドポイントのリモート PC が /v で指定されている場合にのみ読み込まれます。

/admin -- リモート PC 管理用のセッションに接続します。

/f -- リモート デスクトップを全画面モードで開始します。

/w:<幅> -- リモート デスクトップ ウィンドウの幅を指定します。

/h:<高さ> -- リモート デスクトップ ウィンドウの高さを指定します。

/public -- リモート デスクトップをパブリック モードで実行します。

/span -- リモート デスクトップの幅と高さをローカル仮想デスクトップと同じにします (必要であれば、複数のモニターにまたがって表示します)。複数のモニターにまたがって表示するには、モニター全体が長方形になるように配置する必要があります。

/multimon -- リモート デスクトップ サービス セッションのモニターのレイアウトを、クライアント側の現在の構成と同じになるようにします。

/edit -- 指定した .RDP 接続ファイルを編集用として開きます。

/restrictedAdmin -- リモート PC に制限付き管理モードで接続します。このモードでは、リモート PC に資格情報が送信されないので、接続先 PC が侵害されている場合でも接続元が保護されます。ただし、リモート PC からの接続は他の PC によって認証されるとは限らず、アプリケーションの機能や互換性に影響する可能性があります。このパラメーターは /admin を表します。

/remoteGuard -- Remote Guard を使用してデバイスをリモート デバイスに接続します。Remote Guard は、リモート PC に資格情報が送信されることを防ぐするため、接続先のリモート PC が侵害されている場合でも資格情報を保護できます。制限付き管理モードとは異なり、Remote Guard は、すべての要求をデバイスにリダイレクトして戻すことによって、リモート PC から行われた接続もサポートします。

/prompt -- リモート PC に接続する際、資格情報の入力を求めるメッセージが表示されます。

/shadow:<セッション ID> -- シャドウ処理するセッションの ID を指定します。

/control -- シャドウ処理の際にセッションの制御を可能にします。

/noConsentPrompt -- ユーザーの同意がなくてもシャドウ処理ができるようにします。
なお、ユーザ指定はコマンドラインオプションにありません。
RDP でのデフォルトユーザ指定方法
上記にある <接続ファイル> 内へ記入し、オプションに指定することで対応可能です。

※ 現在のバージョンでは、ユーザアカウントは、ユーザ名/パスワードともに入力されませんが、ユーザ名だけは有効にできます。
username:s:myuser
domain:s:mydomain

改変に慣れるための例題

・アカウント管理に passwordbox を利用してみましょう。
・exec コマンドで接続が出来たか否かを判断する条件分岐を作ってみましょう。