From 49c2192d7d53af24909fe3c312f807ce9f7edbc3 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 27 Oct 2026 05:38:48 +0000 Subject: [PATCH] =?UTF-8?q?v2.0.0:=20README=EC=97=90=20=EC=9B=90=EA=B2=A9?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=C2=B7Active/Passive=20=EC=84=A4=EB=AA=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20=EB=B2=84=EC=A0=84=202.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013U497kUNL8ArhV7jkzCpKa --- JJServiceManager.csproj | 2 +- README.md | 95 ++++++++++++++++++++++++++++++++--------- 2 files changed, 77 insertions(+), 20 deletions(-) diff --git a/JJServiceManager.csproj b/JJServiceManager.csproj index 93c1118..51dcc8d 100644 --- a/JJServiceManager.csproj +++ b/JJServiceManager.csproj @@ -15,7 +15,7 @@ disable latest true - 1.1.0 + 2.0.0 JJServiceManagerEnt Windows 서비스 기동/종료 관리 ko diff --git a/README.md b/README.md index defbabc..2601429 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # JJServiceManager (Ent) Windows 서비스 기동/종료 관리 프로그램 (C# WPF, .NET 8) -v1.1부터 **다른 PC의 등록된 서비스를 원격으로 모니터링·기동·종료**할 수 있습니다. + +- v1.1부터 **다른 PC의 등록된 서비스를 원격으로 모니터링·기동·종료**할 수 있습니다. +- v2.0부터 **원격관리(화면 보기 / 키보드·마우스 제어)** 와 **Active / Passive 접속 방향 선택**이 추가되었습니다. ## 실행 파일 @@ -21,9 +23,10 @@ v1.1부터 **다른 PC의 등록된 서비스를 원격으로 모니터링·기 - **Windows 강제종료 / Windows 재시작**: 확인창에 표시된 무작위 숫자 6자리를 그대로 입력해야만 실행 (붙여넣기 불가, 설정에서 버튼 숨김 가능) - **설정**, **종료**(JJServiceManager 완전 종료, 서비스는 그대로 유지) - 서비스 목록 - - **전체** 탭: PC별 묶음 ("내 PC", "192.168.0.10 / SERVER01" …), PC별 접기/펼치기 + - **전체** 탭: PC별 묶음 ("내 PC", "192.168.0.10 / SERVER01", "192.168.0.20 / SERVER02 (Passive)" …), PC별 접기/펼치기 - **PC 탭 추가** 콤보박스: 고른 PC만 보여주는 탭을 옆에 추가, ✕로 닫기 (다음 실행 때도 유지) - - 원격 서비스 앞에는 `IP/hostname` 표시 + - 원격 서비스 앞에는 `IP/hostname` 표시 (Passive 대상은 뒤에 `(Passive)`) + - 원격 PC 제목 줄의 **[원격관리]**: 그 PC 화면 보기 / 키보드·마우스 제어 (아래 "원격관리" 참고) - 서비스마다 **Start / Stop / Status / Log**, 상태 자동 갱신 (초록=실행 중, 빨강=중지됨) - 서비스 줄 **우클릭**(내 PC): 로그 파일 지정 / 로그 폴더 지정 / 경로 해제 - 하단 **로그**: 작업 기록 (번호 + 체크박스) @@ -49,45 +52,97 @@ v1.1부터 **다른 PC의 등록된 서비스를 원격으로 모니터링·기 | 역할 | 설정 탭 | 하는 일 | |---|---|---| -| 대상 | **원격 접속 허용** | 다른 PC의 접속을 받아 **이 PC에 등록된 서비스만** 보여주고 Start/Stop 실행 | -| 관리 | **관리 대상 PC** | 등록한 PC에 접속해 그 PC의 서비스를 초기화면에 표시 | +| 대상 | **원격 접속 허용** | 관리 PC에 **이 PC에 등록된 서비스만** 보여주고 Start/Stop 실행, 원격관리 허용 여부 결정 | +| 관리 | **관리 대상 PC** | 등록한 PC의 서비스를 초기화면에 표시, Start/Stop, 로그 보기, 원격관리 | + +### 접속 방향 (대상 PC마다 선택) + +| 방향 | 누가 접속하나 | 쓰는 경우 | 연결 방법 | +|---|---|---|---| +| **Active** | 관리 PC → 대상 PC | 관리 PC가 대상 PC에 직접 접속할 수 있을 때 | 대상 PC의 IP·포트 | +| **Passive** | 대상 PC → 관리 PC | 대상 PC가 방화벽·공유기 뒤에 있어서 들어갈 수 없을 때 | **접속 코드** (예: `3HY7-6TEH`) | + +- Passive는 대상 PC가 관리 PC로 먼저 접속한 뒤, 연결 안에서는 Active와 똑같이 동작합니다 (서비스 목록, Start/Stop, 로그, 원격관리). +- 관리 PC는 접속 코드로 어느 대상 PC인지 구분합니다. 코드가 맞지 않는 접속은 거부합니다. +- 연결이 끊기면 양쪽 모두 자동으로 다시 연결합니다. ### 통신 방식 -| 방식 | 기본 포트 | 설명 | -|---|---|---| -| SSH (프로그램 내장) | 2222 | OpenSSH 설치 없이 프로그램 안의 SSH 서버 사용 | -| 지정 포트 (TLS) | 9988 | 프로그램끼리 TLS로 암호화해 통신 | + +| 방식 | Active 기본 포트 (대상 PC) | Passive 기본 포트 (관리 PC) | 설명 | +|---|---|---|---| +| SSH (프로그램 내장) | 2222 | 2224 | OpenSSH 설치 없이 프로그램 안의 SSH 서버 사용 | +| 지정 포트 (TLS) | 9988 | 9990 | 프로그램끼리 TLS로 암호화해 통신 | - 인증: 대상 PC에서 정한 **접속 비밀번호** (대상 PC에는 해시로만 저장, 관리 PC에는 Windows 계정으로 암호화해 저장) - 서버 지문(인증서) 확인은 하지 않음 (암호화만) - 비밀번호를 5분 동안 10번 넘게 틀리면 잠시 접속 거부 -- 원격 접속 허용을 켜면 Windows 방화벽에 TCP 포트를 자동으로 열고, 끄면 규칙(`JJServiceManager Remote`)을 지움 +- Windows 방화벽 규칙을 자동으로 열고 닫음 + - 대상 PC Active 수신: `JJServiceManager Remote` + - 관리 PC Passive 수신: `JJServiceManager Passive` -### 사용 순서 -1. **대상 PC**: 설정 → 원격 접속 허용 → 켜기, 방식·포트·접속 비밀번호 입력 → 확인 -2. **관리 PC**: 설정 → 관리 대상 PC → 다른 PC 관리 켜기 → 대상 IP, 같은 방식·포트, 비밀번호 입력 → [연결 테스트] → [추가] → 확인 +### 사용 순서 — Active +1. **대상 PC**: 설정 → 원격 접속 허용 → 켜기, 접속 비밀번호 입력, **Active 수신** 켜기, 방식·포트 선택 → 확인 +2. **관리 PC**: 설정 → 관리 대상 PC → 다른 PC 관리 켜기 → 연결 방향 **Active**, 대상 IP, 같은 방식·포트, 비밀번호 입력 → [연결 테스트] → [추가] → 확인 3. 초기화면에 대상 PC 묶음이 나타나고, hostname은 자동으로 채워짐 +### 사용 순서 — Passive +1. **관리 PC**: 설정 → 관리 대상 PC + - 다른 PC 관리 켜기, **Passive 수신 방식 / 포트** 확인 (기본: 지정 포트 9990, Passive 대상이 하나라도 있을 때만 열림) + - 연결 방향 **Passive** 선택 → 접속 코드가 자동으로 만들어짐 ([새 코드]로 다시 만들기) + - 대상 PC의 접속 비밀번호 입력 → [추가] → 확인 + - 초기화면에 `Passive 접속코드` 묶음이 "연결 중…"으로 나타남 +2. **대상 PC**: 설정 → 원격 접속 허용 + - 켜기, 접속 비밀번호 입력 (관리 PC에 넣은 것과 같게) + - **Passive 접속** 칸에 관리 PC 주소, 접속 코드, 방식·포트(관리 PC의 Passive 수신과 같게) 입력 → [추가] → 확인 + - 여러 관리 PC에 동시에 접속하도록 여러 줄 등록 가능 +3. 대상 PC가 접속하면 관리 PC의 묶음 제목이 `IP / hostname (Passive)`로 바뀜 +4. Active 수신이 필요 없으면 대상 PC에서 **Active 수신**을 꺼도 됨 (포트를 열지 않음) + ### 숫자 6자리 확인 설정 → 일반에서 **내 PC** / **원격** Start/Stop 각각 켜고 끔 (기본: 내 PC 끔, 원격 켬). 여러 서비스를 한꺼번에 Start/Stop할 때는 한 번만 입력합니다. -## 테스트용 중복 실행 (정식 릴리즈 시 삭제 예정) -같은 PC에서 두 개를 띄워 원격 기능을 시험할 때: +## 원격관리 (화면 보기 / 키보드·마우스 제어) + +### 대상 PC 설정 (원격 접속 허용 탭 → 원격관리) +| 항목 | 설명 | +|---|---| +| 화면 보기 허용 | 관리 PC에서 이 PC 화면을 볼 수 있음 | +| 화면 및 키보드·마우스 제어 허용 | 관리 PC에서 이 PC를 마우스·키보드로 조작할 수 있음 (화면 보기가 켜져 있어야 함) | +| 연결 시 승인 필요 | 원격관리를 시작할 때마다 이 PC에 승인 창을 띄움 (30초 안에 누르지 않으면 자동 거부) | + +- 허용을 끄면 이미 연결된 원격관리도 바로 끊기거나(보기) 조작이 막힙니다(제어). +- 원격관리 중에는 대상 PC 화면 맨 위 가운데에 **빨간 표시 막대**("원격 제어 중: 관리 PC")가 항상 나타납니다. 막대의 **[연결 끊기]** 를 누르면 즉시 종료됩니다. + +### 관리 PC에서 사용 +1. 초기화면에서 원격 PC 제목 줄의 **[원격관리]** 클릭 +2. 무작위 숫자 6자리 입력 (원격관리는 설정과 관계없이 **항상** 입력, 붙여넣기 불가) +3. 대상 PC에서 승인하면 원격관리 창이 열림 + - **모니터 1 / 모니터 2 … / 전체**: 볼 모니터 선택 (주 모니터에 `(주)` 표시) + - 창을 열면 바로 제어가 시작됨 (제어 허용 시), 상태 줄에 `● 제어 중` 또는 `보기 전용`과 초당 장수 표시 + - 창 안에서 클릭·드래그·휠·키보드 입력이 대상 PC로 전달됨 (창을 떠나면 눌린 키는 자동으로 뗌) + - **[연결 끊기]** 또는 창 닫기로 종료 +- 화면은 JPEG로 압축해 최대 약 8장/초로 보내고, 바뀌지 않은 화면은 보내지 않습니다. +- Ctrl+Alt+Del, Windows 키 조합, UAC 창(보안 데스크톱)은 원격으로 조작할 수 없습니다. + +## 테스트용 중복 실행 +같은 PC에서 여러 개를 띄워 원격 기능을 시험할 때: ``` JJServiceManagerEnt.exe --instance 2 ``` - 창 제목에 `[테스트 인스턴스 2]` 표시 - 설정 폴더를 따로 씀: `%AppData%\JJServiceManager_instance2` -- 기본 포트: 지정 포트 9989, SSH 2223 -- 코드에서 `[테스트용 중복 실행]` 주석이 붙은 부분을 지우면 기능이 사라집니다. +- 기본 포트가 인스턴스 번호만큼 밀림 (인스턴스 N: Active 지정 포트 9988+N-1, SSH 2222+N-1 / Passive 수신 지정 포트 9990+N-1, SSH 2224+N-1) + - 번호가 2 이상 차이 나는 인스턴스끼리는 포트가 겹칠 수 있으니 설정에서 포트를 바꿔 쓰세요. +- 시작 프로그램 작업 이름, 방화벽 규칙 이름, 중복 실행 방지도 인스턴스별로 따로 씀 +- 코드에서 `[테스트용 중복 실행]` 주석이 붙은 부분이 이 기능입니다. ## 설정 | 탭 | 항목 | |---|---| | 일반 | 컴퓨터 시작시 기동, 단축키(기본 Ctrl+Shift+A), 서비스 시작시 로그보기, 로그창 띄우기, Esc, Windows 종료키, 숫자 확인(내 PC/원격) | -| 원격 접속 허용 | 켜기/끄기, 통신 방식, 포트, 접속 비밀번호, 이 PC의 IP 안내 | -| 관리 대상 PC | 다른 PC 관리 켜기/끄기, 대상 IP·방식·포트·비밀번호, hostname 자동, 연결 테스트 | +| 원격 접속 허용 | 켜기/끄기, 접속 비밀번호, Active 수신(방식·포트), Passive 접속 목록(관리 PC 주소·접속 코드·방식·포트), 원격관리(화면 보기 / 제어 / 승인), 이 PC의 IP 안내 | +| 관리 대상 PC | 다른 PC 관리 켜기/끄기, Passive 수신 방식·포트, 대상 목록(연결 방향, 대상 IP 또는 접속 코드, 방식·포트, 비밀번호), hostname 자동, 연결 테스트(Active) | ## 저장 위치 - 설정: `%AppData%\JJServiceManager\settings.json` @@ -98,3 +153,5 @@ JJServiceManagerEnt.exe --instance 2 - 화면 정의는 `Views/*.xaml`이며 실행 시 읽어들입니다 (XAML 컴파일 없음). - 원격 통신: `Core/Remote/` (SSH 라이브러리: Microsoft.DevTunnels.Ssh, MIT) +- 원격관리 화면 캡처·입력: `Core/Remote/ScreenCapture.cs`, 화면: `Windows/RemoteScreenWindows.cs` +- 관리자 권한 없이 시험할 때: `dotnet publish ... -p:TestBuild=true` (asInvoker 매니페스트, 서비스 Start/Stop·방화벽은 실패함)