SSH 고급 가이드
SSH 고급 사용 가이드
이 문서는 SSH를 통한 원격 서버 접속의 고급 기능을 설명합니다. 세션 유지, 파일 전송, 보안 설정 등 실무에 유용한 기능을 다룹니다.
이 가이드는 기본 접속 방법을 알고 있다는 가정하에 작성되었습니다. 기본 접속 방법은 $원격 접속 가이드 문서를 참고하세요.
이 문서는 SSH 고급 기능을 다룹니다. 처음 접하는 용어가 많다면 먼저 $SSH 용어 사전을 참고하세요. 각 섹션에서 "왜 필요한지"와 "언제 사용하는지"를 함께 설명합니다.
세션 유지 도구 (tmux / screen)
왜 필요한가요? SSH로 접속해서 작업하다가 네트워크가 끊기거나 노트북을 닫으면, 실행 중이던 프로그램도 함께 종료됩니다. 딥러닝 학습처럼 오래 걸리는 작업을 할 때 이런 상황은 치명적입니다. tmux나 screen을 사용하면 접속이 끊겨도 작업이 서버에서 계속 실행됩니다.
서버에서 긴 작업을 진행하다가 네트워크가 끊기면 작업이 중단됩니다.
tmux나 screen을 사용하면 접속이 끊겨도 작업이 계속
실행됩니다.
tmux 사용법
서버에 접속한 후 아래 명령어로 tmux 세션을 시작합니다:
tmux new -s my-work
작업을 진행하다가 접속을 끊어도 괜찮습니다. 다시 접속한 후 아래 명령으로 세션을 복원할 수 있습니다:
tmux attach -t my-work
-
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 --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
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형식으로 변환한 후 사용하세요. -
포트 포워딩이 작동하지 않음
서버에서 해당 포트가 실제로 열려있는지 확인하세요. 또한 방화벽 설정도 확인이 필요합니다.