sgcSSH 기능 매트릭스
sgcSSH가 제공하는 모든 기능을 세 개의 클라이언트 컴포넌트, 두 개의 서버 컴포넌트, 그리고 이들이 협상하는 알고리즘을 기준으로 정리했습니다. 동일한 클래스가 Delphi와 .NET에 존재하며, 모든 라이선스에 전체 소스 코드가 제공됩니다.
sgcSSH가 제공하는 모든 기능을 세 개의 클라이언트 컴포넌트, 두 개의 서버 컴포넌트, 그리고 이들이 협상하는 알고리즘을 기준으로 정리했습니다. 동일한 클래스가 Delphi와 .NET에 존재하며, 모든 라이선스에 전체 소스 코드가 제공됩니다.
sgcSSH는 자체 완결형 제품입니다. sgcWebSockets Core 런타임이 함께 포함되어 제공되며, Delphi 컴포넌트의 기반이 되는 sgcCustomIndy 애드온도 항상 주문에 포함됩니다.
sgcWebSockets에도 포함되어 있습니다. 다섯 개의 컴포넌트는 모두 sgcWebSockets Enterprise에도 포함되어 있으며, All-Access에는 모든 것이 포함됩니다. .NET에서는 무료 Community 에디션이 아니라 정식 등록 패키지에 포함됩니다. sgcSSH는 SSH와 SFTP만 필요한 팀을 위한 단독 패키지입니다.
클라이언트 세 개와 서버 두 개가 SGC SSH 팔레트 페이지에 등록되어 있습니다.
| 컴포넌트 | 클래스 | 역할 | 설명 |
|---|---|---|---|
| SSH 클라이언트 | TsgcSSHClient | 명령 실행 | 원격 명령, pty를 갖춘 대화형 셸, 로컬 및 원격 포트 포워딩, 오래 유지되는 세션의 rekey를 지원합니다. |
| SFTP 클라이언트 | TsgcSFTPClient | 파일 전송 | 16개 요청을 동시에 처리하는 SFTP v3 파일 관리자 작업으로, 100 MB 전송이 로컬 네트워크에서 약 1초 걸립니다. |
| SCP 클라이언트 | TsgcSCPClient | 파일과 폴더 복사 | scp로 단일 파일이나 폴더 트리 전체를 업로드하고 다운로드하며, 필요하면 파일 시간을 유지합니다. |
| SSH 서버 | TsgcSSHServer | SSH 클라이언트 수락 | 비밀번호 및 공개 키 인증, exec, shell, 서브시스템 요청을 지원하며 Ed25519, ECDSA, RSA 호스트 키를 사용합니다. |
| SFTP 서버 | TsgcSFTPServer | 폴더 제공 | 루트 폴더에서 SFTP v3와 SCP를 제공하며, 사용자별 jail, 읽기 전용 모드, 작업마다 허용하거나 거부하는 이벤트를 갖추고 있습니다. |
TsgcSSHClient는 인증된 SSH 연결 하나를 열고, 그 위에서 필요한 만큼 채널을 실행합니다.
| 기능 | API | 비고 |
|---|---|---|
| 연결 | Host, Port, Connect, Disconnect | 포트 기본값은 22입니다. |
| 비밀번호 인증 | Authentication.Username, Authentication.Password | 사용자 이름과 비밀번호를 이용한 일반 로그인입니다. |
| 공개 키 인증 | Authentication.PrivateKeyFile, Authentication.Passphrase | PEM 또는 PKCS#8 파일의 Ed25519, ECDSA, RSA 개인 키를 지원하며, .NET에서는 OpenSSH 형식도 지원합니다. |
| 호스트 키 확인 | OnSSHHostKey | 키 유형과 지문을 전달받으므로 known hosts 저장소와 대조해 알 수 없거나 바뀐 키를 거부할 수 있습니다. |
| 원격 명령 | Execute | 채널을 열고 명령을 실행한 뒤 출력을 문자열로 반환하며, 타임아웃을 지정할 수 있습니다. |
| 대화형 셸 | OpenChannel, RequestPTY, RequestShell | 선택한 터미널 유형과 크기의 터미널 세션입니다. |
| 셸 입력과 출력 | SendChannelData, OnSSHChannelData | 사용자가 입력한 내용을 보내고, 서버가 출력한 내용을 받습니다. |
| 터미널 제어 | SendWindowChange, SendSignal, SendEOF | 터미널 크기를 바꾸고, 시그널을 보내거나, 채널의 입력을 끝냅니다. |
| exec 및 서브시스템 채널 | RequestExec, RequestSubsystem | SSH 위에서 동작하는 사용자 정의 프로토콜을 위한 저수준 채널 요청입니다. |
| 로컬 포트 포워딩 | OpenDirectTCPIP | 서버에서 접근할 수 있는 호스트와 포트로 direct-tcpip 채널을 엽니다. |
| 원격 포트 포워딩 | RequestForwarding, CancelForwarding | 서버가 포트에서 수신 대기하다가 그 연결을 클라이언트로 포워딩하도록 요청합니다. |
| Rekey | Rekey | 오래 유지되는 연결의 세션 키를 갱신합니다. |
| 포스트 퀀텀 키 교환 | PostQuantumKex | 기본적으로 켜져 있음: mlkem768x25519-sha256을 가장 먼저 제안합니다. |
TsgcSFTPClient는 같은 SSH 전송 계층 위에서 SFTP v3를 구현하며, SSH 클라이언트와 동일한 인증 및 키 교환 옵션을 제공합니다.
| 기능 | API | 비고 |
|---|---|---|
| 홈 폴더 | RealPath | . 같은 경로를 서버의 절대 경로로 확인합니다. |
| 폴더 목록 | ListDirectory | 모든 항목의 이름, 크기, 수정 날짜, 폴더 여부를 반환합니다. |
| 업로드와 다운로드 | Put, Get | 파일당 한 번의 호출로 16개의 요청을 동시에 처리합니다. 100 MB 전송이 로컬 네트워크에서 약 1초 걸립니다. |
| 파일 관리 | Rename, Delete, MakeDirectory, RemoveDirectory | 파일 관리자에 필요한 모든 기능입니다. |
| 진행률 | OnSFTPProgress | 전송된 바이트 수를 알려 주며, 진행률 표시줄에 바로 사용할 수 있습니다. |
TsgcSCPClient는 scp 명령을 허용하는 모든 서버로 SSH를 통해 파일을 복사합니다.
| 기능 | API | 비고 |
|---|---|---|
| 단일 파일 | Upload, Download | 원격 경로와 파일 하나를 주고받으며 복사합니다. |
| 폴더 트리 | UploadFolder, DownloadFolder | 폴더 전체를 재귀적으로 복사합니다. |
| 파일 시간 | PreserveTimes | 수정 시간과 액세스 시간을 상대편에도 유지합니다. |
| 진행률 | OnSCPProgress | 파일 이름과 전송된 바이트 수를 알려 줍니다. |
TsgcSSHServer는 표준 ssh, sftp, scp 명령줄 도구를 포함해 SSH 클라이언트라면 무엇이든 받아들입니다.
| 기능 | API | 비고 |
|---|---|---|
| 수신 대기 | Port, Active | 서버를 시작하고 중지합니다. |
| 호스트 키 | HostKeyFiles, GenerateHostKeyEd25519 | Ed25519, ECDSA, RSA 호스트 키를 지원합니다. 클래스 프로시저가 Ed25519 키 파일을 대신 만들어 줍니다. |
| 비밀번호 인증 | OnSSHAuthPassword | 자체 사용자 저장소를 기준으로 사용자 이름과 비밀번호를 확인합니다. |
| 공개 키 인증 | OnSSHAuthPublicKey | 키 유형과 SHA256 지문을 전달받으므로, 알고 있는 키만 수락할 수 있습니다. |
| 원격 명령 | OnSSHExec, SendChannelData, SendExitStatus, CloseChannel | 명령에 응답하고, 종료 상태를 알리고, 채널을 닫습니다. |
| 대화형 셸 | OnSSHShell, OnSSHChannelData | 자체 코드에서 터미널 세션을 제공합니다. |
| 서브시스템 | SFTPServer | sftp 같은 서브시스템 요청은 연결된 TsgcSFTPServer로 전달됩니다. |
| 연결 이벤트 | OnSSHConnect, OnSSHDisconnect | 모든 연결을 상대 주소와 함께 기록합니다. |
TsgcSFTPServer는 TsgcSSHServer에 연결되어, 클라이언트가 벗어날 수 없는 폴더에서 파일을 제공합니다.
| 기능 | API | 비고 |
|---|---|---|
| 프로토콜 | SFTP, SCP | SFTP v3를 지원하며, 활성화하면 scp 전송도 지원합니다. |
| 루트 폴더 | RootFolder | 클라이언트에 보이는 폴더입니다. 그 밖의 경로는 거부됩니다. |
| 사용자별 폴더 | OnSFTPUserRoot | 각 사용자의 루트를 반환하므로, 모든 사용자는 자신의 파일만 볼 수 있습니다. |
| 읽기 전용 모드 | ReadOnly | 업로드, 삭제, 이름 변경을 거부합니다. |
| 작업별 제어 | OnSFTPOperation | 읽기 또는 쓰기 목적의 open, remove, rename, 폴더 생성과 삭제, 속성 변경, 목록 조회가 일어날 때마다 발생합니다. aAccept를 False로 설정하면 클라이언트는 권한 거부 오류를 받습니다. |
| 대용량 다운로드 | 흐름 제어 | 파일 크기와 관계없이 다운로드는 일정한 메모리를 사용합니다. |
클라이언트와 서버는 가장 강력한 알고리즘을 먼저 제안하고, 상대편이 필요로 할 때만 기존 알고리즘으로 대체합니다.
| 영역 | 알고리즘 | 비고 |
|---|---|---|
| 키 교환 | mlkem768x25519-sha256 | ML-KEM-768과 X25519를 결합한 방식으로 최신 SSH 릴리스의 기본값입니다. 클라이언트와 서버 모두 가장 먼저 제안합니다. |
| 기존 키 교환 | curve25519, ECDH, Diffie-Hellman group14 및 group16 | 상대편이 하이브리드 교환을 지원하지 않을 때 사용합니다. |
| 암호 | AES-GCM, AES-CTR | .NET 8 이상에서는 AES-GCM이 하드웨어로 가속됩니다. |
| 호스트 키와 사용자 키 | Ed25519, ECDSA, RSA | SHA-2를 사용하는 RSA 서명이며 server-sig-algs로 선택됩니다. |
| 키 파일 | PEM, PKCS#8, OpenSSH (.NET) | 암호화된 개인 키는 암호 문구로 엽니다. |
| 엄격한 키 교환 | Terrapin 대응 | SSH 핸드셰이크에 대한 접두사 절단 공격을 막습니다. |
Delphi와 .NET에서 동일한 다섯 개의 컴포넌트를 제공합니다.
| 영역 | 세부 내용 |
|---|---|
| Delphi | Delphi 7부터 13까지, VCL, FMX, 콘솔 애플리케이션, 서비스를 지원합니다. |
| Delphi 대상 | Windows Win32, Windows Win64, Linux64. |
| .NET | .NET 8, .NET 9, .NET 10, .NET Standard 2.0. 완전한 관리형 코드이며 OpenSSL이 필요 없습니다. |
| 데모 | Demos\27.SSH: SSH 클라이언트, SFTP 클라이언트, SCP 클라이언트, SSH 서버, SFTP 서버. |
| 에디션 | 다섯 개의 컴포넌트는 모두 sgcWebSockets Enterprise에도 포함되어 있으며, All-Access에는 모든 것이 포함됩니다. .NET에서는 정식 등록 패키지에 포함되고 Community 에디션에는 포함되지 않습니다. |
| 라이선스 | 단독 제품입니다. sgcWebSockets Core 런타임이 함께 포함되고, sgcCustomIndy가 주문에 포함되며, 전체 소스 코드가 제공됩니다. |