SSH 고급 가이드

schedule 작성일: 2025년 12월 3일 오전 03:14
update 최종 수정: 2025년 12월 3일 오전 03:14

SSH 고급 사용 가이드

이 문서는 SSH를 통한 원격 서버 접속의 고급 기능을 설명합니다. 세션 유지, 파일 전송, 보안 설정 등 실무에 유용한 기능을 다룹니다.

📌 참고
이 가이드는 기본 접속 방법을 알고 있다는 가정하에 작성되었습니다. 기본 접속 방법은 $원격 접속 가이드 문서를 참고하세요.
📘 초급자 안내
이 문서는 SSH 고급 기능을 다룹니다. 처음 접하는 용어가 많다면 먼저 $SSH 용어 사전을 참고하세요. 각 섹션에서 "왜 필요한지"와 "언제 사용하는지"를 함께 설명합니다.

세션 유지 도구 (tmux / screen)

왜 필요한가요? SSH로 접속해서 작업하다가 네트워크가 끊기거나 노트북을 닫으면, 실행 중이던 프로그램도 함께 종료됩니다. 딥러닝 학습처럼 오래 걸리는 작업을 할 때 이런 상황은 치명적입니다. tmux나 screen을 사용하면 접속이 끊겨도 작업이 서버에서 계속 실행됩니다.

서버에서 긴 작업을 진행하다가 네트워크가 끊기면 작업이 중단됩니다. tmuxscreen을 사용하면 접속이 끊겨도 작업이 계속 실행됩니다.

tmux 사용법

서버에 접속한 후 아래 명령어로 tmux 세션을 시작합니다:

tmux new -s my-work

작업을 진행하다가 접속을 끊어도 괜찮습니다. 다시 접속한 후 아래 명령으로 세션을 복원할 수 있습니다:

tmux attach -t my-work
💡 자주 쓰는 tmux 단축키
  • Ctrl+b 다음 d: 세션에서 나가기 (작업은 계속 실행됨)
  • Ctrl+b 다음 c: 새 창 만들기
  • Ctrl+b 다음 n: 다음 창으로 이동

screen 사용법

tmux와 비슷하지만 더 오래된 도구입니다:

screen -S my-work

세션 복원:

screen -r my-work

파일 전송

StreamGPU 서버는 SFTP 프로토콜을 통한 데이터 전송을 지원합니다.

📁 파일 전송 안내
대용량 파일이나 많은 양의 데이터를 전송해야 한다면 $SFTP 파일 전송 가이드 문서를 참고하세요. 운영체제별 상세한 사용법과 GUI 도구 사용법을 소개합니다.

포트 포워딩 (로컬/원격)

포트 포워딩을 사용하면 로컬 머신과 원격 서버 간의 포트를 안전하게 전달할 수 있습니다.

왜 필요한가요? 서버에서 Jupyter Notebook(8888번 포트)이나 웹 애플리케이션(80번 포트)을 실행했을 때, 내 컴퓨터 브라우저에서 바로 접속할 수 없습니다. 포트 포워딩을 사용하면 서버의 포트를 내 컴퓨터로 "터널링"해서 마치 로컬에서 실행 중인 것처럼 접속할 수 있습니다.

로컬 포트 포워딩 (-L)

서버에서 실행 중인 서비스를 내 컴퓨터에서 접속하고 싶을 때 사용합니다. 아래 명령은 서버의 80번 포트를 내 컴퓨터의 8080번 포트로 연결합니다.

Mac / Linux / Git Bash / WSL

ssh -L 8080:localhost:80 -i ~/.ssh/streamgpu/key.pem awesome@server.example.com -p <포트번호>

Windows PowerShell (OpenSSH)

ssh -L 8080:localhost:80 -i $env:USERPROFILE\.ssh\streamgpu\key.pem awesome@server.example.com -p <포트번호>

접속 후 브라우저에서 http://localhost:8080으로 접속하면 서버의 80번 포트 서비스를 사용할 수 있습니다.

💡 Jupyter Notebook 예시
서버에서 jupyter notebook --port 8888을 실행한 경우:
ssh -L 8888:localhost:8888 -i ~/.ssh/streamgpu/key.pem awesome@server.example.com -p <포트번호>
이후 브라우저에서 http://localhost:8888로 접속합니다.

원격 포트 포워딩 (-R)

내 컴퓨터의 서비스를 서버에서 접속하고 싶을 때 사용합니다. 보안에 주의가 필요하므로 꼭 필요한 경우에만 사용하세요.

ssh -R 2222:localhost:22 -i ~/.ssh/streamgpu/key.pem awesome@server.example.com -p <포트번호>
⚠️ 보안 주의
원격 포트 포워딩(-R)은 내 컴퓨터의 서비스를 외부에 노출할 수 있습니다. 필요한 경우에만 사용하고, 사용 후에는 연결을 종료하세요.

백그라운드에서 명령 실행

원격에서 장시간 작업을 실행할 때는 nohup이나 &, 또는 tmux를 사용하세요.

왜 필요한가요? SSH 접속을 끊으면 해당 세션에서 실행한 프로그램도 종료됩니다. nohup을 사용하면 접속을 끊어도 프로그램이 계속 실행됩니다.

기본 사용법

# 출력을 nohup.out 파일에 저장 (기본)
nohup python my_script.py &

# 출력을 특정 파일에 저장
nohup python my_script.py > my_log.txt 2>&1 &

# 실행 중인 작업 확인
jobs -l

# 프로세스 ID로 확인
ps aux | grep my_script.py
💡 권장: tmux 사용
nohup보다 tmux를 사용하는 것이 더 편리합니다. tmux에서는 실행 중인 화면을 다시 볼 수 있고, 여러 창을 동시에 관리할 수 있습니다. 위의 "세션 유지 도구" 섹션을 참고하세요.

보안 권장사항

  • 루트 직접 로그인을 비활성화하세요
  • 공개 키 인증을 우선 사용하세요 (비밀번호 비활성화 권장)
  • 불필요한 포트는 방화벽으로 차단하세요

비밀번호 인증 비활성화

서버의 /etc/ssh/sshd_config 파일을 열어 다음 설정을 추가합니다:

PasswordAuthentication no
    PubkeyAuthentication yes

설정 후 SSH 서비스를 재시작합니다:

# Ubuntu/Debian 계열
sudo systemctl restart ssh

# CentOS/RHEL/Fedora 계열
sudo systemctl restart sshd

# 또는 (구형 시스템)
sudo service ssh restart

참고: 배포판에 따라 서비스 이름이 ssh 또는 sshd로 다를 수 있습니다. 오류가 나면 다른 이름으로 시도해보세요.

루트 로그인 비활성화

같은 파일에서 아래 설정을 추가합니다:

PermitRootLogin no

접속 제한 (IP 화이트리스트)

특정 IP에서만 접속을 허용하려면 방화벽 설정을 사용합니다:

sudo ufw allow from <허용할IP> to any port <SSH포트>

접속 기록 확인

누가 언제 서버에 접속했는지 확인할 수 있습니다:

last -a

현재 접속 중인 사용자 확인:

w

SSH 설정 파일로 접속 간편화

매번 긴 SSH 명령을 입력하는 대신, 설정 파일에 서버 정보를 저장해두면 간단한 별칭으로 접속할 수 있습니다.

Mac / Linux / Git Bash / WSL

~/.ssh/config 파일을 만들거나 편집합니다:

# ~/.ssh/config
Host myserver
    HostName server.example.com
    Port 2222
    User awesome
    IdentityFile ~/.ssh/streamgpu/my-server-abc123.pem

이제 다음과 같이 간단하게 접속할 수 있습니다:

ssh myserver

Windows PowerShell (OpenSSH)

%USERPROFILE%\.ssh\config 파일을 만들거나 편집합니다:

# C:\Users\사용자명\.ssh\config
Host myserver
    HostName server.example.com
    Port 2222
    User awesome
    IdentityFile C:\Users\사용자명\.ssh\streamgpu\my-server-abc123.pem
💡 여러 서버 관리
여러 서버를 사용한다면 각각 다른 Host 이름으로 등록해두면 편리합니다. ssh server1, ssh server2처럼 별칭으로 접속할 수 있습니다.
🔧 용어 설명
  • SSH (Secure Shell): 암호화된 네트워크 통신 프로토콜. 원격 서버를 안전하게 제어할 수 있습니다.
  • 포트 포워딩: 네트워크 포트를 다른 포트로 연결하는 기술. 원격 서버의 서비스를 로컬에서 사용할 수 있게 합니다.
  • 세션: 서버와의 연결 상태. tmux/screen은 세션을 유지해 재접속 후에도 작업을 이어갈 수 있게 합니다.
  • scp (Secure Copy): SSH를 기반으로 한 파일 전송 프로토콜.

문제 해결

  • "Connection refused" 오류
    서버의 SSH 서비스가 실행 중인지, 포트 번호가 맞는지 확인하세요.
  • "Too many authentication failures" 오류
    SSH가 너무 많은 키를 시도하고 있습니다. -o IdentitiesOnly=yes 옵션을 추가하세요:
    ssh -o IdentitiesOnly=yes -i ~/.ssh/streamgpu/key.pem awesome@server.example.com -p <포트번호>
  • 파일 전송 중 "Permission denied" 오류
    원격 경로에 쓰기 권한이 있는지 확인하세요.
  • Windows: "Bad permissions" 또는 "unprotected private key file" 오류
    키 파일 권한이 너무 열려 있습니다. PowerShell에서 아래 명령으로 권한을 제한하세요:
    icacls "$env:USERPROFILE\.ssh\streamgpu\key.pem" /inheritance:r /grant:r "$env:USERNAME:(R)"
  • Windows: PuTTY에서 "Server refused our key" 오류
    PuTTY는 .pem 파일을 직접 사용할 수 없습니다. PuTTYgen으로 .ppk 형식으로 변환한 후 사용하세요.
  • 포트 포워딩이 작동하지 않음
    서버에서 해당 포트가 실제로 열려있는지 확인하세요. 또한 방화벽 설정도 확인이 필요합니다.