Commit Graph

2 Commits (48a2ba56dcb2978642cbec1f35862d20b34fb542)

Author SHA1 Message Date
RyuJongJin ecb2b9f7b1 modular_sync #6 RemoteFs (F11): 원격 4종의 mkdirs 를 한 규칙으로 (remoteMkdirs) - 같은 이름의 파일이면 모두 RemoteNameIsFile
- remote_fs.dart: remoteMkdirs(client, rel, mkdirOne) - 없는 위 폴더까지 · 이미 폴더면 그대로 · 같은 이름의 파일이면 RemoteNameIsFile (파일은 그대로).
  서버마다 다른 것은 한 칸 만들기뿐 (FTP MKD · SFTP mkdir (그 사이 다른 곳이 만들었으면 그대로) · SMB 채널 · WebDAV MKCOL).
  위 폴더 계산 remoteParent 하나 (FTP · SFTP · SMB 의 _parent 복사 3벌 지움)
- 고치기 전 판 (bdea662) 에서 FTP 는 같은 이름의 파일 위 mkdirs 가 오류 없이 넘어감을 확인 (r6_before.log) - 뒤의 쓰기가 엉뚱한 오류로 끝났다.
  WebDAV 는 서버 오류 글, SFTP · SMB 는 서버마다 다른 예외였다
- 약속 시험: 실제 시험 서버 WebDAV (TestDavServer) · FTP (pyftpdlib) · SFTP (asyncssh). SMB 는 Android 에서만 (기기 확인)

사용자가 보게 될 동작: 원격으로 복사 · 맞출 때 받는 쪽에 같은 이름의 파일이 있으면 서버와 상관없이 "같은 이름의 파일이 있어 폴더를 만들 수 없습니다"

확인: analyze 0 · 단위 1489 ×2 · 통합 6/6 ×2 · base10 214장 0px · windows_ftp_shot · windows_sshkey_shot ×2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 13:27:13 +09:00
RyuJongJin b5918b7aa2 WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완)
사용자 "진행" (10/17, 관리자 3a 전달) - 88 설계안의 제안값:
1) Windows SMB 는 운영체제 그대로 2) 키 암호는 안전 저장소 3) ssh-rsa 기본 끔 · 서버마다 켬 4) SMB3 암호화 (SMB 때) 5) 서버 rsync 는 다음 판.

이 커밋 (화면은 아직 없음 - 설정 화면 · 탐색기 탭은 다음 커밋):
- lib/core/remote_fs.dart: 원격 저장소 공통 동작 (RemoteClient). WebDAV (DavClient) 도 이것으로.
- lib/core/sftp.dart: SftpServer (설정, 비밀 값은 toJson 에 없음) · SftpRemote (dartssh2, 서버마다 연결 하나를 다시 씀) · SftpRegistry.
  - 호스트 키: 믿은 지문이 없으면 연결하지 않고 지문 (SHA256:…) 을 알림 (SftpHostKeyException) → 화면이 묻고 저장.
    바뀌면 막고 예전 · 지금 지문을 알림 (중간자 공격 안내).
  - 비밀번호 · keyboard-interactive · 개인 키 (암호), 키 암호 틀림 · 키를 못 읽음 · 저장된 비밀번호 없음 · 닿지 않음 · 권한 · 없는 경로를 사람 말로.
  - 오래된 서버: 처음엔 SHA-1 을 쓰지 않고 "오래된 ssh-rsa 허용" 을 안내, 서버마다 켜면 ssh-rsa · SHA-1 키 교환.
  - DNS 강제를 따라 직접 연결 (집 안 이름 · 주소는 기기 DNS), 시작 폴더 (비우면 홈).
  - 소켓 끊김의 쓰기 실패가 처리되지 않은 오류로 올라오지 않게.
- vfs: sftp:// 를 dav:// 와 같은 원격 길로 (isDav = 원격, isWebDav · isSftp 따로). 화면 "🔑 서버/경로", 받아서 열기는 jj_sftp.
- 설정: sftpServers (비밀번호 · 개인 키 · 키 암호는 안전 저장소 sftp.pw/key/kp.<id> 에만, 평문 파일에 쓰지 않음), .bak · 깨진 파일 가림,
  최상 비밀번호 초기화의 "저장된 비밀번호 지우기" 에 SFTP 도.
- 재생 · 다른 앱: SFTP 는 스트리밍 주소가 없어 고른 파일만 받아서 (진행 · 취소) 틀고 같은 폴더 자막도 받음 (다음 파일로 넘어가지 않음 - 1차).
- 시험: test/sftp_test.dart 7개 (설정 · 경로 + paramiko 시험 서버: TOFU · 바뀐 키 · 틀린 비밀번호 · 닿지 않음 · vfs 전체 · 키 로그인 · ssh-rsa).
  tool/sftp_test_server.py (paramiko 3.5.1 - 5.0 은 SHA-1 을 뺌), venv 는 ..\tools\sftp_test_py (없으면 건너뜀).
- 라이선스 고지 · 화면 · Android SMB 는 다음 커밋.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 22:11:07 +09:00