Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- model
- JPA
- 클린아키텍처
- Transaction
- 문제선택근거
- 단위테스트
- SEQUENCE
- TDD
- AOP
- Ajax
- 전전긍긍
- 공통기술
- string
- index
- SpringLegacy
- 사면초가
- 이벤트핸들러등록
- MVC
- 커뮤니티서버
- DDD
- 이벤트핸들러this
- MVC요청플로우
- 공통규약
- 설정세팅
- 디스크i/o
- 로그백
- JDBC
- 냄새라도
- OOP
- springsecurity
Archives
- Today
- Total
개발이군고구마
PuTTY로 SSH 접속하면 서버에서 무슨 일이 일어날까 본문
728x90
PuTTY는 SSH 클라이언트, bash는 명령 해석기, Linux 커널은 실제 실행 주체, 파이프는 프로세스 간 데이터 통로

[내 키보드]
|
v
[PuTTY]
- SSH 클라이언트
- 입력을 암호화해 전송
- 서버 출력 화면 표시
|
v
~~~~~~~~~~~~~~ 네트워크 ~~~~~~~~~~~~~~
|
v
[sshd]
- SSH 서버 데몬
- 연결 수락
- 인증 처리
- 세션 생성
|
v
[로그인 셸: bash]
- 명령 해석
- 프로그램 실행 요청
- 파이프/리다이렉션 구성
|
v
[Linux 커널]
- 프로세스 생성/실행
- stdin/stdout/stderr 연결
- pipe 생성
PuTTY로 접속했을 때 bash는 왜 보일까
PuTTY를 열고 서버에 접속하면 보통 검은 화면에 명령어를 입력하게 됨.
이때 사용자는 마치 “PuTTY에서 명령을 실행”하는 느낌을 받음.
하지만 실제로는 서버 쪽에서 실행 중인 셸과 대화하는 것임.
즉,
- PuTTY = 내 PC에서 돌아가는 SSH 클라이언트
- bash = 서버에서 돌아가는 셸
- 명령 실행 대상 = 서버 OS
stdin, stdout, stderr란 무엇인가
리눅스/유닉스 프로그램은 시작할 때 기본적으로 3개의 표준 스트림을 가짐.
0 -> stdin : 표준 입력
1 -> stdout : 표준 출력
2 -> stderr : 표준 에러 출력
이 3개는 프로그램이 “어디서 입력을 받고, 어디로 출력할지”에 대한 기본 통로임.
C 표준 라이브러리와 POSIX 문서에서도 stdin, stdout, stderr를 기본 표준 스트림으로 정의함.
bash는 정확히 무슨 일을 하는가
bash는 사용자가 입력한 문자열을 읽고, 그 문장을 실행 가능한 형태로 바꾸는 명령 해석기임.
grep ssh /var/log/auth.log | tail -n 10
bash가 하는 일은 대략 다음과 같음.
- 문자열 파싱
- |가 있으니 파이프라인으로 인식
- grep 프로세스와 tail 프로세스를 실행할 준비
- 둘 사이에 파이프 생성
- grep의 stdout을 파이프 쓰기 쪽에 연결
- tail의 stdin을 파이프 읽기 쪽에 연결
- 각 프로그램 실행
- 종료 상태 수집
Bash 매뉴얼은 파이프라인에서 각 명령이 별도 프로세스로 실행되며, 셸이 파이프라인의 종료를 기다린다고 설명함.
| 파이프의 진짜 원리
파이프는 메모리나 커널 버퍼에 연결된 읽기/쓰기 통로임.
커널은 pipe() 시스템 콜로 파이프를 만들고, 프로세스는 그 양 끝을 파일 디스크립터처럼 다룸. dup/dup2는 한 파일 디스크립터를 다른 번호에 복제해 같은 열린 파일 설명을 가리키게 함. 이 메커니즘으로 stdout과 stdin을 원하는 대상으로 연결함
명령어:
cat file.txt | grep error
실행 구조:
[file.txt] -> [cat 프로세스] --stdout--> [pipe] --stdin--> [grep 프로세스] -> 화면
'SERVER > CS' 카테고리의 다른 글
| EC2 리눅스 OS 서버 데이터 저장 구조 (1) | 2026.07.12 |
|---|---|
| 로그 (0) | 2026.06.07 |
| OS와 CPU의 작동 원리, 그리고 CPU 100% 문제 해결 (0) | 2026.03.27 |
| [요청응답 A-Z] 4. 서버 Runtime 환경 (5) | 2025.07.25 |
| [요청응답 A-Z] 3. 서버 Boot (2) | 2025.07.25 |