💪

リモートデスクトップに自動でログインする

2023/12/16に公開

きっかけ

業務上、仮想マシンに接続する機会が増えてきました。
頻繁に接続する仮想マシンであればIPアドレスorホスト名、ユーザー名とパスワードそれぞれを覚えていますが、そうでないものに関しては忘れてしまいます・・・。
そんなことにならないように、いっそのことbatファイル化して 忘れてもいいようにしよう! 効率よくRDP接続してみよう!と思ったのがきっかけです。

成果物

setコマンドにそれぞれの値を入力後にbatファイルを実行するとIPアドレスorホスト名の指定と資格情報の入力を飛ばすことができるようになります。
SERVER:接続したい仮想マシンのIPアドレスorホスト名
USERNAME:ログインするユーザー名
PASSWORD:ログインユーザーのパスワード
WAITTIME:資格情報削除までの待機時間

@echo off

set SERVER=xxx.xxx.xxx
set USERNAME=userName
set PASSWORD=password
set WAITTIME=10

cmdkey /generic:TERMSRV/%SERVER% /user:%USERNAME% /pass:%PASSWORD%

start mstsc /v:%SERVER%

timeout %WAITTIME%
cmdkey /delete:TERMSRV/%SERVER%

setコマンドにそれぞれの値を入力後にbatファイルを実行するとIPアドレスorホスト名の指定と資格情報の入力を飛ばすことができるようになります。

処理している内容とコマンドについて

基本的にはWindowsアクセサリのリモートデスクトップ接続と処理している流れは同じです。

  1. 資格情報の入力
    コマンド
    cmdkey
    引数
    /generic:・・・コンピュータに汎用資格情報を追加
    /user・・・資格情報を追加するアカウント名
    /pass:・・・資格情報を追加するアカウントのパスワード
  2. RDP接続
    コマンド
    mstsc
    引数
    /v:・・・接続する仮想マシン
  3. 資格情報の削除
    コマンド
    cmdkey
    引数
    /delete:・・・指定したユーザー名とパスワードを削除

おまけ

上記内容だと仮想マシンごとにbatファイルが必要になってきます。
batファイルを探すのに時間をかけてしまったらこのbatを作成した意味が薄れてしまうので、1つのbatにまとめました。

@echo off

echo 接続する仮想マシン名を入力
set /p machineName=

setlocal enabledelayedexpansion

set WAITTIME=10

goto PC_!machineName!

:PC_A
 set SERVER=xxx.xxx.xxx.xxx
 set USERNAME=name_A
 set PASSWORD=pas_A
 goto LINK

:PC_B
 set SERVER=yyy.yyy.yyy.yyy
 set USERNAME=name_B
 set PASSWORD=pas_B
 goto LINK

:LINK
 cmdkey /generic:TERMSRV/!SERVER! /user:!USERNAME! /pass:!PASSWORD!
 start mstsc /v:!SERVER!

 goto DELETE

:DELETE
 cmdkey /delete:TERMSRV/!SERVER!

endlocal

このbatでは、以下の処理を行っています。

  1. PC名の入力
    コマンド
    set
    引数
    /p:・・・入力を受け付けて変数に代入する
  2. RDP接続
    (省略)
  3. 資格情報の削除
    (省略)

gotoコマンドは指定したラベル処理を飛ばすコマンドです。
画面の入力にAを入力された例を紹介します。

  1. PC名の入力
    (入力):A
  2. ラベル:PC_Aへ処理を飛ばす。
    setコマンドで仮想マシン名、ユーザー名、パスワードをセット。
  3. ラベル:LINKへ処理を飛ばす。
    RDP接続。
  4. ラベル:DELETEへ処理を飛ばす。
    資格情報の削除

setコマンドセットした値を各ラベルで使用したいため、setlocal ~ endlocalで全体を囲っています。
これは遅延環境変数という変数を使用しています。
詳しくは以下ををご覧ください。
https://wa3.i-3-i.info/word12518.html

最後に

記事の最初に「効率よくRDP接続したい!」なんて書きましたが、先輩がbatを使って接続しているのを見て自分でも作ってみたいと思ったのが始まりです。
batはもっと難しいイメージを持っていましたが思っていたよりも早く作ることができました(調べながらで15~20分程度)。
むしろ記事を書く方が時間がかかりました・・・。
おまけについては、ここまで作りこむならC#などでツール化して方が便利かなと思いつつ作りました。後悔はしていません。

小さなツールからコツコツ挑戦してみることは大切ですね。それではノシ。

Discussion