Aaa
Aaa 카테고리의 모든 포스트 - 한국어
5개의 포스트
scp 개념정리
SCP 완벽 가이드 (Kubernetes & Linux 실무용)
1) 기본 개념
scp
= SSH 위에서 파일/디렉터리를 복사하는 명령.- 형식:
scp [옵션] <src> <dst>
- 방향: 로컬→리모트, 리모트→로컬, 리모트↔리모트 모두 가능.
- 현대 OpenSSH는 기본적으로 SFTP 모드 사용 (
-O
로 레거시 scp 프로토콜 강제 가능).
2) 필수 옵션 & 패턴
자주 쓰는 옵션
옵션 | 설명 |
---|---|
-r | 디렉터리 재귀 복사 |
-p | 원본의 시간/권한 보존 |
-C | 압축 |
-l <kbps> | 대역폭 제한 |
-i <key> | 특정 프라이빗 키 사용 |
-P <port> | SSH 포트 지정 |
-o <SSH옵션> | 임시 SSH 옵션 지정 |
-J <jump> | 점프호스트 경유 |
로컬 → 리모트
scp -P 2222 ./app.jar ubuntu@worker-1:/opt/apps/
scp -rpC ./config ubuntu@worker-2:/etc/myservice/
리모트 → 로컬
scp ubuntu@master-1:/var/log/k8s/api-server.log ./logs/
리모트 ↔ 리모트
scp ubuntu@worker-1:/opt/data/dump.tar ubuntu@worker-2:/opt/backup/
scp -3 ubuntu@worker-1:/opt/data/dump.tar ubuntu@worker-2:/opt/backup/
점프호스트 경유
scp -J ubuntu@bastion:22 ./site.tgz ubuntu@worker-3:/srv/
3) 실무 레시피
특정 파일만
scp ./*.yaml ubuntu@master-1:~/manifests/
scp ubuntu@master-1:'/var/log/*.log' ./logs/
숨김파일 포함
scp -rpC ~/.bash* ~/.zshrc ubuntu@worker-1:~/
권한 문제 해결
scp ./nginx.conf ubuntu@worker-1:/tmp/
ssh ubuntu@worker-1 'sudo mv /tmp/nginx.conf /etc/nginx/nginx.conf && sudo systemctl reload nginx'
대용량 성능 최적화
tar czf - ./dataset | ssh ubuntu@worker-2 'tar xzf - -C /data/'
중단 후 재개
sftp ubuntu@worker-1
sftp> reget bigfile.img
sftp> reput bigfile.img
kubectl과 함께
kubectl cp ./config.yaml default/my-pod:/app/config.yaml
4) 보안 베스트 프랙티스
# 서버 측 설정
PasswordAuthentication no
PubkeyAuthentication yes
# 권한 설정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
- 호스트키 검증:
-o StrictHostKeyChecking=yes
- 점프호스트 사용
- 방화벽(UFW)로 SSH 포트 제한
- Fail2ban / Cloudflare Tunnel 고려
5) 성능/안정화 팁
scp -o Ciphers=aes128-gcm@openssh.com -C big.csv ubuntu@host:/data/
scp -l 40000 big.img ubuntu@host:/backup/
scp -o ConnectTimeout=5 -o ServerAliveInterval=10 -o ServerAliveCountMax=6 ...
6) 문제 해결 체크리스트
- Permission denied → 키/권한 확인
- Connection timed out → 방화벽/포트포워딩 확인
- 파일명 특수문자 → 따옴표 감싸기
- 원격 글로빙 문제 → 따옴표로 원격에서 해석
7) rsync와 비교
- scp: 간단, 빠른 일회성 복사
- rsync: 동기화, 재개, 검증 등 강력
8) 즐겨 쓰는 스니펫
scp -pqC ./k8s/*.yaml ubuntu@master-1:~/manifests/
scp ubuntu@worker-2:'/var/log/syslog*' ./logs/worker-2/
scp -3 ubuntu@worker-1:/opt/dump.tgz ubuntu@worker-3:/opt/backup/
tar czf - ./dataset | ssh ubuntu@worker-2 'tar xzf - -C /data/'
scp ./nginx.conf ubuntu@worker-1:/tmp/ && ssh ubuntu@worker-1 'sudo install -m 644 /tmp/nginx.conf /etc/nginx/nginx.conf && sudo systemctl reload nginx'
scp -J ubuntu@bastion ./bundle.tgz ubuntu@worker-3:/srv/
scp -l 30000 -C ./logs.tar.gz ubuntu@backup:/backup/
9) 생산성 팁
~/.ssh/config
적극 활용- 스크립트화
- 전송 후
sha256sum
비교
ssh 개념정리
SSH 완벽 가이드 (K8s & 리눅스 실무 기준)
1. SSH 키 생성과 보관
SSH 접속의 기본은 키 기반 인증입니다.
키 생성 (ed25519 권장)
ssh-keygen -t ed25519 -a 100 -C "yun@homelab" -f ~/.ssh/id_ed25519
-t ed25519
: 키 타입을 ed25519로 설정 (보안+속도)-a 100
: KDF 라운드 수 (브루트포스 방어)-C
: 키 주석(Comment)-f
: 키 저장 경로
퍼미션 설정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
공개키 배포
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
2. ~/.ssh/config 설정 예제
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
TCPKeepAlive yes
ControlMaster auto
ControlPersist 10m
ControlPath ~/.ssh/cm-%r@%h:%p
IdentitiesOnly yes
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking ask
UpdateHostKeys yes
Host bastion
HostName 203.0.113.10
User yun
Host k8s-master
HostName 192.168.219.151
User cadenza
ProxyJump bastion
Host k8s-worker-1
HostName 192.168.219.181
User cadenza
ProxyJump bastion
Host k8s-worker-2
HostName 192.168.219.182
User cadenza
ProxyJump bastion
Host k8s-*
Compression yes
ForwardAgent no
3. 자주 쓰는 SSH 명령 패턴
- 디버깅:
ssh -vvv host
- 특정 키로 접속:
ssh -i ~/.ssh/otherkey host
- 특정 포트:
ssh -p 2222 host
- 원격 명령 실행:
ssh host "uptime"
- 파일 복사:
scp file.txt k8s-master:/tmp/
- 디렉토리 동기화:
rsync -avz -e ssh ./dir/ k8s-worker-1:/opt/dir/
4. 포트 포워딩 활용
로컬 포워딩 (-L)
ssh -L 16443:127.0.0.1:6443 k8s-master
→ 로컬에서 kubectl --server https://127.0.0.1:16443
가능
디스크 용량, 사용량 확인
Ubuntu 기준 디스크 용량 및 사용량 확인 가이드
이 문서는 Ubuntu 리눅스 환경에서 디스크의 물리적인 총 용량과 현재 사용 중인 용량을 확인하는 방법에 대해 자세히 설명합니다.
📌 1. df
명령어 - 디스크 사용량 확인
기본 사용법
df -h
-h
: 사람이 읽기 쉬운 단위로 출력 (KB, MB, GB 등)
예시 출력
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 20G 75G 22% /
tmpfs 16G 1.0M 16G 1% /dev/shm
유용한 옵션
옵션 | 설명 |
---|---|
-h | Human-readable (단위 표기) |
-T | 파일시스템 유형 표시 |
--total | 총합 정보 표시 |
-a | 모든 파일시스템 포함 (사용 안 되는 것도 포함) |
예시
df -hT
df -h --total
📌 2. lsblk
명령어 - 물리 디스크 및 파티션 확인
기본 사용법
lsblk
출력 예시
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
└─sda1 8:1 0 100G 0 part /
유용한 옵션
옵션 | 설명 |
---|---|
-f | 파일 시스템 포함 출력 |
-o | 출력 필드 지정 |
예시
lsblk -f
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
📌 3. du
명령어 - 디렉토리별 디스크 사용량 확인
예시: 루트 디렉토리의 사용량 요약
sudo du -sh /*
-s
: 합계만 표시-h
: 사람이 읽기 쉬운 단위로 표시
특정 디렉토리 하위 전체 확인
du -h --max-depth=1 /home
📌 4. df
+ grep
으로 특정 마운트 포인트 확인
df -h | grep '/$'
📌 5. mount
명령어로 마운트 정보 확인
mount | column -t
📌 6. 디스크 용량 시각화 도구
ncdu
- 인터랙티브한 디스크 사용량 확인 도구
sudo apt install ncdu
sudo ncdu /
📌 7. ls -lh
명령어 - 디렉토리 내 파일 크기 확인
ls -lh /var/log
-l
: 자세히-h
: 사람 읽기 쉬운 단위
📌 8. 블록 디바이스 정보 - blkid
sudo blkid
📌 9. 디스크 스마트 정보 확인 - smartctl
sudo apt install smartmontools
sudo smartctl -a /dev/sda
✅ 요약
목적 | 명령어 |
---|---|
전체 디스크 사용량 요약 | df -h |
물리 디스크 확인 | lsblk |
디렉토리 사용량 | du -sh /* |
시각적 디스크 탐색 | ncdu / |
파일별 크기 확인 | ls -lh |
마운트된 디스크만 확인 | `df -h |
이 문서는 Ubuntu 및 일반적인 Linux 배포판에서 디스크 상태를 점검할 때 매우 유용합니다.
중요하고 자주 사용하는 설정들
리눅스에서 자주 사용하고 중요한 설정 파일 목록 (K8s 포함)
쿠버네티스(K8s) 환경에서 특히 자주 보게 되는 리눅스 기본 설정 파일과 네트워크 관련 설정 파일을 사용 빈도와 중요도 순으로 정리했습니다.
1. /etc/hosts
- 용도: 호스트명과 IP 주소를 수동으로 매핑
- K8s에서: 내부 테스트, DNS 문제 시 임시 호스트명 매핑
- 예시
127.0.0.1 localhost
192.168.0.10 master-node
192.168.0.11 worker-node-1
- 명령어 참고
cat /etc/hosts
sudo nano /etc/hosts
2. /etc/resolv.conf
- 용도: DNS 서버 설정
- K8s에서: CoreDNS 설정 확인, DNS 장애 트러블슈팅 시 필수
- 예시
nameserver 8.8.8.8
nameserver 1.1.1.1
search cluster.local
- 명령어 참고
cat /etc/resolv.conf
3. /etc/hostname
- 용도: 서버의 호스트명 지정
- K8s에서: 노드명 변경 시 참고
- 예시
master-node
- 명령어 참고
hostname
sudo hostnamectl set-hostname new-name
4. /etc/fstab
- 용도: 부팅 시 자동 마운트할 파일 시스템 정의
- K8s에서: PV(Local Path, NFS 등) 사용 시 마운트 설정 확인
- 예시
UUID=xxxx-xxxx /data ext4 defaults 0 2
- 명령어 참고
cat /etc/fstab
5. /etc/systemd/system/
- 용도: 사용자 정의 systemd 서비스 파일
- K8s에서: kubelet, containerd 등 서비스 설정
- 예시
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- 명령어 참고
systemctl status kubelet
6. /etc/sysctl.conf & /etc/sysctl.d/
- 용도: 커널 파라미터 설정
- K8s에서: 네트워크 패킷 포워딩, 브리지 관련 설정 필수
- 예시
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
- 명령어 참고
sysctl -a
sudo sysctl --system
7. /etc/security/limits.conf
- 용도: 프로세스별 리소스 제한
- K8s에서: etcd, Elasticsearch 등 메모리/파일 핸들 제한 설정
- 예시
* soft nofile 65535
* hard nofile 65535
8. /etc/profile & ~/.bashrc
- 용도: 환경 변수 설정
- K8s에서: PATH, alias, kubeconfig 경로 설정
- 예시
export KUBECONFIG=/etc/kubernetes/admin.conf
alias k=kubectl
9. /etc/network/interfaces 또는 /etc/netplan/
- 용도: 네트워크 인터페이스 IP 설정
- K8s에서: 노드 고정 IP 지정
- 예시 (netplan)
network:
ethernets:
eth0:
addresses: [192.168.0.10/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
version: 2
10. /etc/ssh/sshd_config
- 용도: SSH 서버 설정
- K8s에서: 노드 원격 접속 보안 설정
- 예시
Port 22
PermitRootLogin no
PasswordAuthentication no
11. /var/log/syslog & /var/log/messages
- 용도: 시스템 로그
- K8s에서: 네트워크/DNS 문제, kubelet 오류 확인
- 명령어 참고
tail -f /var/log/syslog
journalctl -u kubelet -f
12. /etc/modules-load.d/
- 용도: 부팅 시 로드할 커널 모듈 지정
- K8s에서:
br_netfilter
,overlay
필수 - 예시
overlay
br_netfilter
13. /etc/containerd/config.toml
- 용도: containerd 설정
- K8s에서:
SystemdCgroup = true
설정 필요 - 명령어 참고
sudo systemctl restart containerd
14. /etc/kubernetes/
- 용도: K8s 마스터 노드 설정 파일
- 예시
/etc/kubernetes/admin.conf
/etc/kubernetes/manifests/kube-apiserver.yaml
15. /etc/crontab & /etc/cron.*
- 용도: 주기적 작업 예약
- K8s에서: 백업, 로그 정리 등
- 예시
0 2 * * * root /usr/local/bin/backup.sh
참고
이 목록은 K8s 홈랩 환경과 운영 리눅스 서버 모두에서 중요한 파일 위주로 선정했습니다.