Aaa

Aaa 카테고리의 모든 포스트 - 한국어

5개의 포스트

aaa 에 관해서
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

유용한 옵션

옵션설명
-hHuman-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 홈랩 환경운영 리눅스 서버 모두에서 중요한 파일 위주로 선정했습니다.