1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事誰得? 私しか得しないニッチな技術で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

RustDeskのOSSセルフホストでIDをコンピューター名にした~い!なんならキッティングも自動化した~い!

Last updated at Posted at 2024-06-30

と思う人は多いと思ったので作ってみました。
営利目的とか会社で使うならRustDesk Server Proのライセンス買ってあげて下さいね。

RustDesk2.toml
rendezvous_server = 'RustDeskメインサーバのIPまたはホスト名:21116'
[options]
key = '生成済みの公開鍵'
custom-rendezvous-server = 'RustDeskメインサーバのIPまたはホスト名'
relay-server = 'RustDeskリレーサーバのIPまたはホスト名'

上記以外の設定はRustDeskクライアント側で設定変更をした後、AppDataディレクトリから該当のRustDesk2.tomlを見ると設定内容を確認できます。

Installer.ps1
# 管理者権限昇格要求用
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit }
Set-Location -Path (Split-Path -Path $MyInvocation.MyCommand.Definition -Parent)

# RustDeskのクライアントが存在していた場合、一旦アンインストールする
if (Test-Path "$env:APPDATA\RustDesk") {
    & "C:\Program Files\RustDesk\rustdesk.exe" --uninstall
    Start-Sleep -Seconds 15
}

# サービスのデータも削除する
Remove-Item -Recurse -Force "C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk" -ErrorAction SilentlyContinue

# 各ユーザーのデータも削除する
Get-ChildItem -Directory "C:\Users" | ForEach-Object {
    $userDir = $_.FullName
    $rustDeskPath = "$userDir\AppData\Roaming\RustDesk"
    if (Test-Path $rustDeskPath) {
        Remove-Item -Recurse -Force $rustDeskPath -ErrorAction SilentlyContinue
    }
}

# rustdeskのインストーラーを実行する
& ".\rustdesk.exe" --silent-install

# インストールしてrustdesk.exeが叩けるようになるまで待つ
do {
    Start-Sleep -Seconds 1
} until (Test-Path "C:\Program Files\RustDesk\rustdesk.exe")

# コンピューター名関連の処理をする
$computerName = $env:COMPUTERNAME

# コンピューター名の1文字目が英字以外の場合"R"を接頭語にする(好きなように変えられます )
if ($computerName[0] -notmatch '^[a-zA-Z]') {
    $computerName = "R" + $computerName
}

# 英数字以外(ハイフンとか)使われている場合ヌル文字に置き換える
$cleanedComputerName = $computerName -replace '[^a-zA-Z0-9]', ''

#16文字を超える場合16文字以内に切り捨てる
if ($cleanedComputerName.Length -gt 16) {
    $cleanedComputerName = $cleanedComputerName.Substring(0, 16)
}

$RDCN = $cleanedComputerName

# 事前に生成した設定ファイルを突っ込む
$configDir = "C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config"
New-Item -ItemType Directory -Path $configDir -Force
Copy-Item -Path "RustDesk2.toml" -Destination "$configDir\"

# 事前に生成したIDを突っ込む
$idContent = "id = '$RDCN'"
$idContent | Out-File -FilePath "$configDir\RustDesk.toml" -Encoding utf8

# 各ユーザーで同じことをする
Get-ChildItem -Directory "C:\Users" | ForEach-Object {
    $userDir = $_.FullName
    $userConfigDir = "$userDir\AppData\Roaming\RustDesk\config"
    if (-not (Test-Path $userConfigDir)) {
        New-Item -ItemType Directory -Path $userConfigDir -Force
        Copy-Item -Path "RustDesk2.toml" -Destination "$userConfigDir\"
        $idContent | Out-File -FilePath "$userConfigDir\RustDesk.toml" -Encoding utf8
    }
}

# 念の為ちょっと寝かせる
Start-Sleep -Seconds 10

# 無人アクセス用パスワードを設定する(ちゃんとセキュリティには気をつけて設定して下さい)
& "C:\Program Files\RustDesk\rustdesk.exe" --password HogeFuga

上記をiexpressとかでパッケージ化、配布すれば無人インストールセットアップが出来ます。

IDが重複してしまった場合の処理は行っていません。また、判定もしていません。
OSS版サーバはユーザー側でのID変更は対応していません。(サーバ側のsqliteをさわさわすれば弄ることは可能、但しクライアント側も反映が必要)(--set-idを使わなかったのはこれが理由)
一度使用したIDは別のコンピューターに割り振ることはそのままでは出来ません。
サーバのsqliteを削除して再起動するか、編集すれば再利用することが出来ます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?