Alert
ìŽ êžì Claude Codeì ëìì ë°ì ìì±ëììµëë€
TL;DR
- SCPì SFTPë SSH ììì ëìíë íìŒ ì ì¡ íë¡í ìœ
- íìŒ ì ì¡ì 볞ì§ì ì§ë ¬í â íší· ë¶í â ìíží â ëŒì°í â ì¬ì¡°ëŠœ 곌ì
- SCPë ëšë°ì± ë³µì¬ì í¹í, SFTPë ìží°ëí°ëž íìŒ êŽëЬì í¹í
- OpenSSH 9.0ë¶í° SCP ëŽë¶ë SFTP íë¡í ìœë¡ ì í
- ëììŒë¡ rsync, rclone ë± ìí©ì ë§ë ë구 ì í íì
1. íìŒ ì ì¡ìŽë 묎ììžê°
ìë² Aì ìë íìŒì ìë² Bë¡ â볎ëžë€âë ê²ì 묌늬ì ìŒë¡ íìŒìŽ ìŽëíë ê²ìŽ ìëë€. íìŒì ë°ìŽíž ë°ìŽí°ë¥Œ ë€ížìí¬ë¥Œ íµíŽ ë³µì íë ê²ìŽë€. ìŽ ê³Œì ì ìŽíŽíë €ë©Ž ëª ê°ì§ íµì¬ ê°ë ì 뚌ì ìììŒ íë€.
íìŒìŽë 묎ììžê°
ìŽì첎ì êŽì ìì íìŒì ëì€í¬ì ì ì¥ë ì°ìë ë°ìŽíž(byte) ìíì€ë€. report.csvë image.pngë 볞ì§ì 0곌 1ë¡ ìŽë£šìŽì§ ë°ìŽíž ë°°ìŽìŽë€.
# íìŒì ë°ìŽíž 구조 íìž
xxd report.csv | head -5
# 00000000: 6e61 6d65 2c61 6765 2c63 6974 790a name,age,city.íìŒì ë ê°ì§ ì ë³Žë¡ êµ¬ì±ëë€.
- ë©íë°ìŽí°: íìŒëª , í¬êž°, ê¶í, ìì±/ìì ìê° (inodeì ì ì¥)
- ë°ìŽí°: ì€ì ëŽì© ë°ìŽíž
ì§ë ¬í (Serialization)
íìŒì ë€ížìí¬ë¡ ì ì¡íë €ë©Ž 뚌ì ì°ìë ë°ìŽíž ì€ížëŠŒìŒë¡ ë³ííŽìŒ íë€. ìŽê²ìŽ ì§ë ¬íë€.
- ë©ëªšëЬì ì¬ëŒê° íìŒ ë°ìŽí°ë¥Œ ììê° ë³Žì¥ë ë°ìŽíž ìíì€ë¡ ë³í
- ìì ìž¡ìì ëìŒí ê·ì¹ìŒë¡ ìì§ë ¬í(deserialization)íì¬ ì볞ì ë³µì
- íìŒ ì ì¡ììë íìŒ ëŽì© ìì²Žê° ìŽë¯ž ë°ìŽíž ìíì€ìŽë¯ë¡, ë©íë°ìŽí°(íìŒëª , ê¶í ë±)륌 íšê» ì§ë ¬ííë ê²ìŽ íµì¬
2. ë€ížìí¬ë¥Œ íµí ë°ìŽí° ì ë¬ â OSI 7ê³ìžµê³Œ TCP/IP
íìŒì ë°ìŽížê° ë€ížìí¬ë¥Œ íê³ ë€ë¥ž ìë²ì ëë¬íë 곌ì ì ê³ìžµíë íë¡í ìœ ì€íì ê±°ì¹ë€.
OSI 7ê³ìžµ 몚ëžê³Œ íìŒ ì ì¡ì êŽê³
| OSI ê³ìžµ | íë¡í ìœ Â· êž°ì | íìŒ ì ì¡ììì ìí |
|---|---|---|
| 7. Application | SCP, SFTP, FTP, HTTP | íìŒ ì ì¡ ëª ë ¹ |
| 6. Presentation | ë°ìŽí° íì · ìíží | SSH ìíží |
| 5. Session | SSH ìžì êŽëЬ | SSH ì°ê²° ì늜 |
| 4. Transport | TCP | íší· ìì ë³Žì¥ Â· ì¬ì ì¡ |
| 3. Network | IP | ëŒì°í · 목ì ì§ ê²°ì |
| 2. Data Link | Ethernet, Wi-Fi | íë ì ì ì¡ |
| 1. Physical | ì êž° · êŽ ì íž | 묌늬ì ì ë¬ |
ì€ë¬Žìì ë ë§ìŽ ì°ë [[2. ë€ížìí¬ ë¯žìì ìŒë¡ ìŽíŽë³Žêž°#TCP/IP ëªšëž (TCP/IP 4ê³ìžµ, ìží°ë· íë¡í ìœ ì€ìíž, TCP/IP íë¡í ìœ ì€í[ 1], ìŽë¡ ë³Žëš êµ¬í ì€ì¬)|TCP/IP 4ê³ìžµ]] ìŒë¡ 볎멎 ë€ì곌 ê°ë€.
| TCP/IP ê³ìžµ | ìí | íìŒ ì ì¡ììì ëì |
|---|---|---|
| Application | íë¡í ìœ ê·ìœ | SCP/SFTPê° íìŒ ë°ìŽí°ë¥Œ SSH ì±ëì êž°ë¡ |
| Transport | ì ë¢°ì± ë³Žì¥ | TCPê° íší· ìì 볎ì¥, ì ì€ ì ì¬ì ì¡ |
| Internet | 죌ì ì§ì 곌 ëŒì°í | IPê° ëª©ì ì§ ìë²ê¹ì§ì 겜ë¡ë¥Œ ê²°ì |
| Network Access | 묌늬ì ì ë¬ | ìŽëë· íë ììŒë¡ ë³ííì¬ ì€ì ì ì¡ |
íší· ë¶í 곌 ì¬ì¡°ëŠœ
10MB íìŒì í ë²ì ë³ŽëŒ ì ìë€. TCPë ë°ìŽí°ë¥Œ ìžê·žëšŒíž(segment) ëšìë¡ ë¶í íë€.
Original file (10MB)
â
âŒ
ââââââââ¬âââââââ¬âââââââ¬âââââââ¬ââââââ
â seg1 â seg2 â seg3 â seg4 â ... â TCP segments (MSS, ~1460 bytes)
ââââ¬ââââŽâââ¬ââââŽâââ¬ââââŽâââ¬ââââŽââââââ
â â â â
⌠⌠⌠âŒ
ââââââââ¬âââââââ¬âââââââ¬âââââââ
â pkt1 â pkt2 â pkt3 â pkt4 â IP packets (MTU, ~1500 bytes)
ââââââââŽâââââââŽâââââââŽâââââââ
â â â â
⌠⌠⌠âŒ
each packet is routed independently across the network
â â â â
⌠⌠⌠âŒ
reassembled by sequence number on the receiverMSSì MTU
- MTU (Maximum Transmission Unit): ë€ížìí¬ ìží°íìŽì€ê° í ë²ì ì ì¡í ì ìë ìµë íë ì í¬êž°. ìŽëë· êž°ë³žê° 1500 bytes
- MSS (Maximum Segment Size): TCP ìžê·žëšŒížì ìµë ë°ìŽí° í¬êž°. MTUìì IP í€ë(20B)ì TCP í€ë(20B)륌 빌멎
1500 - 40 = 1460 bytes- 10MB íìŒì ì ì¡í멎 ìœ 7,200ê°ì íší·ìŽ ìì±ëë€
TCPì ì ë¢°ì± ë³Žì¥ ë©ì»€ëìŠ
íìŒ ì ì¡ìì TCPê° ì€ìí ìŽì ë ë°ìŽí° 묎결ì±ì 볎ì¥íêž° ë묞ìŽë€.
- ìì ë²íž (Sequence Number): ê° ë°ìŽížì ê³ ì ë²ížë¥Œ ë¶ì¬íì¬ ìì ìž¡ìì ì¬ë°ë¥ž ììë¡ ì¬ì¡°ëŠœ
- íìž ìëµ (ACK): ìì ìž¡ìŽ âì¬êž°ê¹ì§ ë°ìë€âê³ ìë €ì€
- ì¬ì ì¡: ACKê° ìŒì ìê° ëŽì ì€ì§ ììŒë©Ž íŽë¹ ìžê·žëšŒížë¥Œ ë€ì ì ì¡
- 첎í¬ì¬ (Checksum): ì ì¡ ì€ ë¹ížê° 깚ì¡ëì§ ê²ìŠ
- íëŠ ì ìŽ (Flow Control): ìì ìž¡ì ë²íŒ ìíì ë°ëŒ ì ì¡ ìë ì¡°ì (Window Size)
- íŒì¡ ì ìŽ (Congestion Control): ë€ížìí¬ íŒì¡ëì ë°ëŒ ì ì¡ëì ëì ì¡°ì
sequenceDiagram participant S as ì¡ì ìž¡ participant R as ìì ìž¡ S->>R: SEQ=1, 1460 bytes S->>R: SEQ=1461, 1460 bytes S->>R: SEQ=2921, 1460 bytes R-->>S: ACK=4381 (4380ë²ì§ž ë°ìŽížê¹ì§ ìì ) S-xR: SEQ=4381, 1460 bytes (ì ì€) Note over S: íììì ë°ì S->>R: SEQ=4381, 1460 bytes (ì¬ì ì¡) R-->>S: ACK=5841
3. SSH â 볎ì ì±ëì êž°ë°
SCPì SFTP륌 ìŽíŽíë €ë©Ž 뚌ì ìŽë€ì í ëìž SSH(Secure Shell)륌 ìììŒ íë€.
SSHê° íŽê²°íë 묞ì
SSH ìŽì ì ì격 ì ì ë구(Telnet, rsh)ë ë°ìŽí°ë¥Œ **í묞(plaintext)**ìŒë¡ ì ì¡íë€. ëêµ°ê° ë€ížìí¬ ì€ê°ìì íší·ì ê°ë¡ì±ë©Ž(ì€ëí) ë¹ë°ë²ížì ì ì¡ ë°ìŽí°ê° ê·žëë¡ ë žì¶ëìë€.
[Telnet]
client ââââ password: abc123 (plaintext) âââââ¶ server
â
(!) sniffer reads the password directly
[SSH]
client ââââ 3f:a2:9b:... (encrypted) âââââ¶ server
â
(!) sniffer only sees meaningless bytesSSH ì°ê²° ì늜 곌ì
SSH ì°ê²°ì ìž ëšê³ë¡ ìŽë£šìŽì§ë€.
1ëšê³: TCP ì°ê²° ì늜 (3-way handshake)
sequenceDiagram participant C as íŽëŒìŽìžíž participant S as ìë² (í¬íž 22) C->>S: SYN S->>C: SYN + ACK C->>S: ACK Note over C,S: TCP ì°ê²° ì늜 ìë£
2ëšê³: SSH í€ êµí곌 ìíží íì
sequenceDiagram participant C as íŽëŒìŽìžíž participant S as ìë² S->>C: íë¡í ìœ ë²ì ì ì¡ (SSH-2.0-OpenSSH_9.7) C->>S: íë¡í ìœ ë²ì ì ì¡ (SSH-2.0-OpenSSH_9.7) S->>C: ì§ì ìê³ ëŠ¬ìŠ ëª©ë¡ (KEX / ìíží / MAC / ìì¶) C->>S: ì§ì ìê³ ëŠ¬ìŠ ëª©ë¡ S->>C: í€ êµí KEX (Diffie-Hellman / ECDH) C->>S: í€ êµí KEX Note over C,S: ì쪜 몚ë ëìŒí ìžì í€ ìì± ìë£<br/>ìŽí 몚ë íµì ì ìŽ í€ë¡ ìíží
Diffie-Hellman í€ êµíì íµì¬
ë ë¹ì¬ìê° ë¹ë° í€ë¥Œ ì§ì ì ì¡íì§ ìê³ ë ëìŒí ê³µì ë¹ë°(shared secret)ì ë§ë€ìŽëžë€. ë¹ì í멎 âë ì¬ëìŽ ê°ì ë¹ë° ìì ììŽì ê°ì ìµì¢ ìì ë§ëë ê²â곌 ê°ë€. ë€ížìí¬ë¥Œ ëì²íŽë ì€ê° ê°ë§ìŒë¡ë ìµì¢ í€ë¥Œ ê³ì°í ì ìë€.
3ëšê³: ì¬ì©ì ìžìŠ
client server
â â
âââââ choose auth method ââââââââââââââââââââ¶â
â â
ââ[ public-key auth ]âââââââââââââââââââââââââ€
âââââ "authenticate with this public key" âââ¶â
âââââ "that key is in authorized_keys" âââââââ
âââââ data signed with the private key ââââââ¶â
âââââ authentication success âââââââââââââââââ
â â
ââ[ password auth ]âââââââââââââââââââââââââââ€
âââââ encrypted password ââââââââââââââââââââ¶â
âââââ authentication success âââââââââââââââââ
â âSSH ì±ë (Channel) 구조
íëì SSH ì°ê²° ìì ì¬ë¬ ë ŒëŠ¬ ì±ëì ìŽ ì ìë€. ìŽê²ìŽ SSHì ê°ì ìŽë€.
âââââ SSH connection (single TCP connection) âââââââââââââââââââââââââââ
â â
â âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ â
â â channel 0 â â channel 1 â â channel 2 â â
â â shell session â â SFTP subsystem â â port forwarding â â
â âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ â
â â
â all channels are multiplexed into one encrypted TCP stream â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââê° ì±ëì íëŠ ì ìŽì ë°ìŽí° ì ì¡ìŽ ë 늜ì ìŽë€. SFTPë ìŽ ì±ë 구조륌 íì©íì¬ SSH ì°ê²° ìì **ìëžìì€í (subsystem)**ìŒë¡ ëìíë€.
4. SCP (Secure Copy Protocol)
ê°ë
SCPë SSH ììì ëìíë ëšë°©í¥ íìŒ ë³µì¬ íë¡í ìœìŽë€. BSDì rcp (remote copy) ëª
ë ¹ì SSHë¡ ê°ìŒ ê²ìŽ ììŽë€.
ëì ì늬
scp local.txt user@server:/home/user/
ì€í íëŠ:
1. SSH ì°ê²° ì늜 (ìì 3ëšê³)
2. ì격 ìë²ìì scp íë¡ìžì€ ì€í (ìì 몚ë)
3. íë¡í ìœ ë©ìì§ë¡ íìŒ ë©íë°ìŽí° ì ì¡
4. íìŒ ë°ìŽí°ë¥Œ SSH ì±ëì ì€ížëЬë°
5. ì ì¡ ìë£ í ì°ê²° ì¢
ë£
SCP íë¡í ìœì ë§€ì° ëšìí í ì€íž êž°ë° ëª ë ¹ì ì¬ì©íë€.
Sender -> Receiver:
"C0644 1048576 local.txt\n" # file mode, size, name
[1048576 bytes of data] # actual file content
"\0" # transfer-complete signal
Receiver -> Sender:
"\0" # OK responseC: ìŒë° íìŒ ì ì¡ (ëë í 늬ëD)0644: íìŒ íŒë¯žì 1048576: íìŒ í¬êž° (bytes)local.txt: íìŒëª
Ʞ볞 ì¬ì©ë²
# ë¡ì»¬ â ì격
scp file.txt user@host:/path/to/dest/
# ì격 â ë¡ì»¬
scp user@host:/path/to/file.txt ./local/
# ëë í 늬 ì¬ê· ë³µì¬
scp -r ./mydir user@host:/path/
# í¬íž ì§ì
scp -P 2222 file.txt user@host:/path/
# ëìí ì í (Kbit/s ëšì)
scp -l 8000 bigfile.tar.gz user@host:/path/ # 1MB/së¡ ì í
# ìì¶ ì ì¡
scp -C largefile.log user@host:/path/
# ì€ê° ìë² ê²œì (ProxyJump)
scp -J jumphost user@target:/path/file.txt ./SCPì íê³
- ìŽìŽë°êž° ë¶ê°: ì ì¡ìŽ ì€ëšë멎 ì²ìë¶í° ë€ì
- ëë í 늬 íì ë¶ê°: ì격 íìŒ ëª©ë¡ì 볌 ì ìì
- íìŒëª ê²ìŠ ë¯ží¡: 곌거 íìŒëª êž°ë° ë³Žì ì·šìœì ìŽ ë°ê²¬ëš (CVE-2019-6111)
- ì¬ë³ŒëŠ ë§í¬ ì²ëЬ 믞í¡: ììì¹ ëª»í íìŒ ë®ìŽì°êž° ê°ë¥ì±
SCP íë¡í ìœì ì¬ì€ì íŽì¶
OpenSSH 8.0 (2019)ë¶í° SCPì 볎ì 묞ì 륌 ê²œê³ íêž° ììíê³ **OpenSSH 9.0 (2022)**ë¶í°
scpëª ë ¹ì ëŽë¶ì ìŒë¡ SFTP íë¡í ìœì ì¬ì©íë€. ëª ë ¹ìŽ ìží°íìŽì€ë ëìŒíì§ë§ ì ì¡ íë¡í ìœìŽ ë°ëìë€.
5. SFTP (SSH File Transfer Protocol)
ê°ë
SFTPë SSH ììì ëìíë ìë°©í¥ íìŒ êŽëЬ íë¡í ìœìŽë€. ìŽëŠì FTPê° ë€ìŽê°ì§ë§ FTPì ì í ë€ë¥ž íë¡í ìœìŽë€.
| FTP | SFTP | |
|---|---|---|
| êž°ë° íë¡í ìœ | ì첎 íë¡í ìœ | SSH |
| í¬íž | 21 (ì ìŽ) + 20 (ë°ìŽí°) | 22 (SSH í¬íž íë) |
| ìíží | ìì (FTPSë TLS ì¶ê°) | SSHì ìí ì 첎 ìíží |
| ë°©í벜 | ë°ìŽí° í¬íž ëì í ë¹ìŒë¡ ê¹ë€ë¡ì | ëšìŒ í¬ížë¡ ëšì |
| ì€ê³ ìêž° | 1971ë | 2001ë (SSH-2 êž°ë°) |
ëì ì늬
SFTPë SSH ìëžìì€í ìŒë¡ ëìíë€. SSH ì°ê²°ìŽ ì늜ë í ê·ž ìì SFTP ì±ëì ì°ë€.
1. SSH ì°ê²° ì늜
2. íŽëŒìŽìžíž â ìë²: "subsystem sftp" ìì²
3. ìë²: sftp-server íë¡ìžì€ ì€í
4. ìŽí ë°ìŽë늬 íší·ìŒë¡ ìì²/ìëµ êµí
SFTPë SCPì ë¬ëЬ 구조íë ë°ìŽë늬 íší·ì ì¬ì©íë€.
SFTP packet structure:
ââââââââââââ¬âââââââ¬âââââââââ¬âââââââââââ
â length â type â req_id â payload â
â 4 bytes â 1 B â 4 B â variable â
ââââââââââââŽâââââââŽâââââââââŽâââââââââââ
죌ì íší· íì
:
SSH_FXP_INIT (1) - ìŽêž°í
SSH_FXP_OPEN (3) - íìŒ ìŽêž°
SSH_FXP_CLOSE (4) - íìŒ ë«êž°
SSH_FXP_READ (5) - íìŒ ìœêž°
SSH_FXP_WRITE (6) - íìŒ ì°êž°
SSH_FXP_STAT (7) - íìŒ ì 볎 ì¡°í
SSH_FXP_OPENDIR (11) - ëë í 늬 ìŽêž°
SSH_FXP_READDIR (12) - ëë í 늬 ìœêž°
SSH_FXP_MKDIR (14) - ëë í 늬 ìì±
SSH_FXP_REMOVE (13) - íìŒ ìì
SSH_FXP_RENAME (18) - ìŽëŠ ë³ê²œíìŒ ë€ìŽë¡ë 곌ì ììž
sequenceDiagram participant C as íŽëŒìŽìžíž participant S as ìë² (sftp-server) C->>S: SSH_FXP_INIT (version=3) S->>C: SSH_FXP_VERSION (version=3) C->>S: SSH_FXP_OPEN (/data/file.csv) S->>C: SSH_FXP_HANDLE (handle=0x01) C->>S: SSH_FXP_READ (handle, offset=0) S->>C: SSH_FXP_DATA (32768 bytes) C->>S: SSH_FXP_READ (handle, offset=32768) S->>C: SSH_FXP_DATA (32768 bytes) C->>S: SSH_FXP_READ (handle, offset=65536) S->>C: SSH_FXP_STATUS (EOF, íìŒ ë) C->>S: SSH_FXP_CLOSE (handle) S->>C: SSH_FXP_STATUS (OK)
ì ížë€(handle) êž°ë°ìžê°?
SFTPë ìŒë° íìŒìì€í APIì ì ì¬íê² ì€ê³ëìë€.
open â read/write â closeíšíŽì POSIX íìŒ I/Oì ëìŒí 구조ë€. ìŽ ëë¶ì ìì ìì¹ ìœêž°(seek), ìŽìŽë°êž°, ë¶ë¶ ì ë°ìŽížê° ê°ë¥íë€.
Ʞ볞 ì¬ì©ë² â ë°°ì¹ ëªšë
# ìží°ëí°ëž ì ì
sftp user@host
# ì ì í ì¬ì© ê°ë¥í ëª
ë ¹
sftp> ls # ì격 íìŒ ëª©ë¡
sftp> lls # ë¡ì»¬ íìŒ ëª©ë¡
sftp> cd /data # ì격 ëë í 늬 ìŽë
sftp> lcd ~/downloads # ë¡ì»¬ ëë í 늬 ìŽë
sftp> get remote_file.csv # ë€ìŽë¡ë
sftp> put local_file.csv # ì
ë¡ë
sftp> mget *.log # ë€ì€ ë€ìŽë¡ë
sftp> mput *.csv # ë€ì€ ì
ë¡ë
sftp> mkdir new_dir # ì격 ëë í 늬 ìì±
sftp> rm old_file.txt # ì격 íìŒ ìì
sftp> rename old.txt new.txt # ìŽëŠ ë³ê²œ
sftp> df -h # ì격 ëì€í¬ ì©ë íìž
sftp> !command # ë¡ì»¬ ì
ž ëª
ë ¹ ì€í
sftp> exit# ë¹ëíí ë°°ì¹ ëªšë
sftp -b batch.txt user@host
# batch.txt ëŽì©:
# cd /data
# get report_2026.csv
# get summary.csv
# exit# ìŽìŽë°êž° (ì€ëšë ì ì¡ ì¬ê°)
sftp> reget large_backup.tar.gz
# í¬íž ì§ì
sftp -P 2222 user@host6. ì ì¡ ê³Œì ì 첎 귞늌 â SCPë¡ íìŒì ë³ŽëŒ ë ì€ì ë¡ ìŒìŽëë ìŒ
scp report.csv user@10.0.1.50:/data/ 륌 ì€ííì ë ìŒìŽëë ì 첎 곌ì ì ë°ë¥ë¶í° ì¶ì íë€.
ââ Client (10.0.1.10) âââââââââââââââââââââââââââââââââââââââââ
â â
â 1. shell spawns the scp process â
â 2. scp calls the SSH library â
â â
â ââ SSH layer ââââââââââââââââââââââââââââââââââââââââââââ â
â â 3. TCP 3-way handshake -> 10.0.1.50:22 â â
â â 4. SSH protocol version exchange â â
â â 5. key exchange (ECDH) -> session key â â
â â 6. server host key check (~/.ssh/known_hosts) â â
â â 7. user authentication (public key or password) â â
â â 8. open SSH channel â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ââ SCP protocol âââââââââââââââââââââââââââââââââââââââââ â
â â 9. run scp -t /data/ on the remote (receive mode) â â
â â 10. send metadata: C0644 2048000 report.csv â â
â â 11. stream file data (2MB) â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ââ TCP/IP layer âââââââââââââââââââââââââââââââââââââââââ â
â â 12. split encrypted SSH data into TCP segments â â
â â 13. add IP header (src 10.0.1.10 -> dst 10.0.1.50) â â
â â 14. encapsulate into Ethernet frames â â
â â 15. NIC converts to electrical/optical signal & sends â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
(*) network: switches, routers
â
ââ Server (10.0.1.50) âââââââââââââââââââââââââââââââââââââââââ
â 16. NIC receives frames â
â 17. IP/TCP decapsulation -> extract SSH data â
â 18. decrypt with the SSH session key â
â 19. scp process receives the data â
â 20. create and write /data/report.csv â
â 21. set permissions (0644) â
â 22. send completion response -> close connection â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââSFTPë¡ ë³ŽëŒ ë ë¬ëŒì§ë ë¶ë¶
ì íëŠìì SSH ê³ìžµ(38)곌 TCP/IP ê³ìžµ(1222)ì SFTPë ëê°ìŽ ê±°ì¹ë€. ë°ëë 걎 ê°ìŽë° íë¡í ìœ ê³ìžµ íëë¿ìŽë€. SCPê° scp -të¡ ë©íë°ìŽí°ì íìŒ ë°ìŽížë¥Œ íë €ë³ŽëŽë ì늬ìì, SFTPë ìëžìì€í
ì ëì°ê³ 구조íë íší·ì ì£Œê³ ë°ëë€.
ââ SFTP protocol layer (replaces SCP steps 9-11) ââââââââ
â request "subsystem sftp" -> server starts sftp-server â
â SSH_FXP_OPEN /data/report.csv -> SSH_FXP_HANDLE â
â SSH_FXP_WRITE in 32KB chunks (offset by offset) â
â SSH_FXP_CLOSE -> SSH_FXP_STATUS (OK) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ7. ìíží â ì ì¡ ì€ ë°ìŽí°ë¥Œ 볎ížíë ì늬
SSHë ìž ê°ì§ ë°©ìì ì®ìŽ ì±ëì 볎ížíë€. ì€ì ë°ìŽí° ì ì¡ì íëì ìžì
í€ë¡ ì·복ížííë ëì¹ ìíží(chacha20-poly1305, aes256-gcm ë±)ê° ë§¡ê³ , ìžì
í€ êµí곌 ì¬ì©ì ìžìŠì ê³µê°í€Â·ê°ìží€ ìì ì°ë ë¹ëì¹ ìížíê° ëŽë¹íë©°, ì ì¡ ì€ ë³ì¡°ë MACìŒë¡ ê²ìŠíë€. ìµì ìê³ ëŠ¬ìŠì ìížíì ë¬Žê²°ì± ê²ìŠì í ì°ì°ìŒë¡ ì²ëЬíë AEAD 몚ëëŒ MACì ë°ë¡ ê³ì°íì§ ìëë€. ê° ë°©ìì ì늬ì ìœëë AES·RSA·íŽì± 구íì ì ëŠ¬ëŒ ìë€.
8. SCP vs SFTP ë¹êµ
| í목 | SCP (ë ê±°ì) | SFTP |
|---|---|---|
| íë¡í ìœ êµ¬ì¡° | í ì€íž êž°ë°, ëšì | ë°ìŽë늬 íší·, 구조í |
| íìŒ íì | ë¶ê° | ê°ë¥ (ls, cd ë±) |
| ìŽìŽë°êž° | ë¶ê° | ê°ë¥ (reget/reput) |
| ë¶ë¶ ìœêž° | ë¶ê° | ê°ë¥ (offset ì§ì ) |
| íìŒ ìì /ìŽëŠë³ê²œ | ë¶ê° | ê°ë¥ |
| ëë í 늬 ìì± | ë¶ê° | ê°ë¥ |
| ìë | ìœê° ë¹ ëŠ (ì€ë²í€ë ì ì) | íší· ì€ë²í€ë ìì |
| 볎ì | íìŒëª ê²ìŠ ì·šìœì ì¡Žì¬ | 구조íë íë¡í ìœë¡ ìì |
| ìí | ì¬ì€ì íŽì¶ (OpenSSH 9.0+) | íí íì€ |
ì€ë¬Ž ê°ìŽë
- ì€í¬ëŠœížìì ëšì ë³µì¬:
scpëª ë ¹ (ëŽë¶ì ìŒë¡ SFTP ëì)- ìží°ëí°ëž íìŒ êŽëЬ:
sftp- ëì©ë/ë°ë³µ ëêž°í:
rsync- íŽëŒì°ë ì€í 늬ì§:
rclone
9. êŽë š ë구 ë¹êµ
rsync
SCP/SFTPì ì죌 ë¹êµëë ë구. **ì°šë¶ ì ì¡(delta transfer)**ìŽ íµì¬ìŽë€.
# Ʞ볞 ì¬ì©ë² (SSH êž°ë°)
rsync -avz ./data/ user@host:/backup/data/
# 죌ì ìµì
# -a : ì칎ìŽëž 몚ë (íŒë¯žì
, íìì€í¬í, ì¬ë³ŒëŠ ë§í¬ 볎졎)
# -v : ììž ì¶ë ¥
# -z : ì ì¡ ì€ ìì¶
# --progress : ì§íë¥ íì
# --delete : ì볞ì ìë íìŒì ëìììë ìì rsyncì ì°šë¶ ì ì¡ ìê³ ëŠ¬ìŠ:
1. ìì ìž¡ìŽ êž°ì¡Ž íìŒì ëžë¡ë³ 첎í¬ì¬ì ê³ì°íì¬ ì¡ì ìž¡ì ì ë¬
2. ì¡ì ìž¡ìŽ ì íìŒì ëžë¡ ëšìë¡ ì²Ží¬ì¬ ë¹êµ
3. ë³ê²œë ëžë¡ë§ ì ì¡
4. ìì ìž¡ìŽ êž°ì¡Ž ëžë¡ + ì ëžë¡ì ì¡°í©íì¬ íìŒ ì¬êµ¬ì±
결곌: 1GB íìŒìì 10MBë§ ë°ëìë€ë©Ž 10MBë§ ì ì¡
ë구 ì í ê°ìŽë
| ìí© | ë구 |
|---|---|
| ëšì íìŒ ë³µì¬ (1~2ê°) | scp |
| ì격 íìŒ íì·êŽëЬ | sftp |
| ëë í°ëЬ ëêž°í / ëì©ë ë°ë³µ ì ì¡ | rsync |
| íŽëŒì°ë ì€í ëŠ¬ì§ (S3, GCS ë±) | rclone |
| ìëí íìŽíëŒìž / CI/CD | rsync ëë ì ì© SDK |
10. 볎ì ì€ë¬Ž í
# SSH í€ ìì± (Ed25519 ê¶ì¥)
ssh-keygen -t ed25519 -C "user@company.com"
# ê³µê°í€ ì격 ìë²ì ë±ë¡
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
# ìŽí ë¹ë°ë²íž ììŽ SCP/SFTP ì¬ì© ê°ë¥
scp -i ~/.ssh/id_ed25519 file.txt user@host:/path/ì¬êž°ì ë€ë£¬ í€ êž°ë° ìžìŠê³Œ ì ê·Œ ì íì ë€ížìí¬ ë³Žìì ìŽë£šë í ì¶ìŽë€.
볎ì 첎í¬ëЬì€íž
- ë¹ë°ë²íž ìžìŠ ëì ê³µê°í€ ìžìŠ ì¬ì©
- í€ ìê³ ëŠ¬ìŠì Ed25519 ê¶ì¥ (RSA륌 ìŽë€ë©Ž ìµì 4096bit)
- ìë² ìž¡
/etc/ssh/sshd_configììPasswordAuthentication noì€ì - SSH í¬ížë¥Œ Ʞ볞 22ìì ë³ê²œíë ê²ì 볎ì íšê³Œ 믞믞 (í¬íž ì€ìºìŒë¡ ìœê² ë°ê²¬)
- ì€ìí ê²ì fail2ban ê°ì ëžë£šíží¬ì€ ë°©ìŽì í€ êž°ë° ìžìŠ