# 세줄 요약 #
1. Server Setting: 고정 IP 설정, ssh 포트 변경 및 포트 포워딩 설정, ssh 연결 자동화
2. GPU 설정: Nvidia Driver 설치 (* CUDA & Anaconda는 "Docker" 사용할 것이므로 제외!)
3. 추가 설정: Docker 설치(+Nvidia container toolkit 설치), NFS 설치 및 세팅
# 상세 리뷰 #
* GPU 서버 환경: Linux(Ubuntu) base, Nvidia GPU
* 로컬 컴퓨터 환경: Linux or MAC
1. Server Setting
- Ubuntu update: 설치 시작 전에 우분투 업데이트 (가능하면 정기적으로 가끔씩 해주자!)
sudo apt update && sudo apt upgrade
1-1. 고정 IP 설정
- IP 변경 (Server IP 신청 시에 고정 IP로 변경해야한다. 일반적으로는 동적 IP 할당 상태일 것이다)
- yaml 파일 변경 (파일 경로: /etc/netplan/01-network-manager-all.yaml)
- 파일 편집툴로는 여기서는 vi로 통일했지만, vim, nano 등 본인이 편한 툴을 사용하면 된다.
- (참고 링크) https://vitux.com/how-to-configure-networking-with-netplan-on-ubuntu/
sudo vi /etc/netplan/01-network-manager-all.yaml
################
# YAML 파일 편집 #
################
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager # NetworkManger or networkd
ethernets:
enp4s0: # ifconfig에서 검색
dhcp4: no
dhcp6: no
addresses: [111.222.333.123/24] # IP주소/넷마스크(가능하면 24로)
gateway4: 111.222.333.1 # 게이트웨이 주소
nameservers:
addresses: [111.22.33.1, 111.22.33.2] # DNS 주소 1, 2
- IP 업데이트
sudo netplan apply
1-2. ssh 포트 변경 및 외부접속 허용된 포트 포워딩
- ssh 포트 변경
- 기본은 22로 되어있으나 이는 모두가 사용가능하므로 바꿔주면 좋다.
- 일반적으로 0~1000까지는 고정적으로 사용되는 포트가 많으므로 그 이상의 숫자로 바꿔주자 (예. 2222)
- sshd config 파일에서 포트 변경 (경로: /etc/ssh/sshd_config)
sudo vi /etc/ssh/sshd_config
#######################
# sshd config 파일 편집 #
#######################
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Port 2222 # (주석처리 "#"을 지우고, 원하는 숫자로 변경)
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
- ssh 재시작
sudo systemctl restart ssh
- 포트포워딩
- 전산 담당자를 통해 외부접속 허용 가능한 포트 번호를 받을 시 사용 (예. 1234)
- 개념은 외부접속 포트 -> ssh 포트 (예. 1234 -> 2222)
- 1234 포트로 들어온 유저는 자동으로 2222로 넘겨서, ssh 접속을 허용하게 해준다.
- (참고 링크) https://velog.io/@shawnhansh/Ubuntu-%ED%8F%AC%ED%8A%B8%ED%8F%AC%EC%9B%8C%EB%94%A9Portforwarding)
- 포트 현황 조회
sudo iptables -t nat -L --line-numbers
- 포트 포워딩 등록
sudo iptables -t nat -A PREROUTING -p tcp --dport 1234 -j REDIRECT --to-port 2222
# 1234: 출발 포트 번호 (외부접속 허용된 포트 번호)
# 2222: 내가 새로 설정한 ssh 포트 번호
##########################
# iptalbes 조회시 나오는 항목 #
##########################
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 REDIRECT tcp -- anywhere anywhere tcp dpt:1234 redir ports 2222
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
- 포트포워딩 삭제
sudo iptables -t nat -D PREROUTING 1
# 1: 앞서 조회한 PREROUNTING 항목에서 번호를 찾아서 삭제
- 참고로 서버를 재부팅 시에는 포트포워딩도 초기화되므로 다시 설정해주어야 한다!
1-3. 서버 연결 자동화
(* 아래 과정은 로컬 컴퓨터에서 진행해야 한다!)
- ssh 접속 자동화?
- 일반적으로 ssh 접속 시에는 매번 비밀번호를 입력해야한다...
- 따라서 ssh 접속 키를 생성하여, 접속할 서버에 복사해서 두면, 해당 컴퓨터에서는 비밀번호없이 바로 접속할 수 있다.
- (마치 인증된 컴퓨터를 등록하는 개념!)
- ssh 접속용 퍼블릭 키 생성 (keygen generate)
# 로컬 컴퓨터에서!
ssh-keygen -t ecdsa -b 521
- 생성된 퍼블릭 키 확인 (public key)
- 키 경로: ~/.ssh
# 로컬 컴퓨터에서!
cd ~/.ssh # 키 경로로 접근, "~"는 홈 경로를 의미
ls # 파일 목록 조회
########################
# 목록 조회 시 아래처럼 보임 #
########################
config id_ecdsa id_ecdsa.pub known_hosts
# id_ecdsa : private key
# id_ecdsa.pub : public key -> 접속할 서버로 보낼 키
- 퍼블릭 키를 접속할 서버로 복사
- 이제 더이상 ssh 접속 시 매번 비밀번호를 칠 필요가 없다!
- (* 아래의 ssh-copy-id는 리눅스, 맥에서만 가능하다..., 윈도우의 경우 다음의 링크 참고: https://chrisjhart.com/Windows-10-ssh-copy-id/)
# 로컬 컴퓨터에서!
ssh-copy-id -i [PUBLIIC_KEY_PATH] [USER]@[SERVER_IP]
# [PUBLIC_KEY_PATH]: 퍼블릭 키 경로 (예. /home/user/.ssh/id_ecdsa.pub)
# [USER]: 접속할 서버의 유저 ID
# [SERVER_IP]: 접속할 서버의 IP 주소 (예. 111.222.333.123)
# Window의 경우 CMD 또는 Powershell에서 실행!
type C:\Users\[user]\.ssh\id_ecdsa.pub | ssh [server_tag] "cat >> .ssh/authorized_keys"
# [user]: window user 이름
# [server_tag]: 아래의 서버 접속 자동화에서 config 파일에 설정한 tag
- ssh 접속 자동화 설정
- ssh config 파일을 등록 시, ssh tag로 쉽게 접속할 수 있다!
- 일반적으로는 [>>> ssh user@111.222.333.123 -p 1234] 처럼 터미널에서 command를 쳐야 한다.
- 아래처럼 config 파일을 작성하면, [>>> ssh Server_tag]와 같이 매우 쉽게 접속 가능!
- ssh config 파일 생성 (이미 config 파일 생성이 되어있다면 이후부터는 편집만 하면 된다)
# 로컬 컴퓨터에서!
sudo vi ~/.ssh/config
######################
# ssh config 파일 편집 #
######################
Host [Server tag]
HostName [Server IP]
User [ID]
Port [Port Number]
# [Server tag]: 원하는 서버 태그 (본인 편한 태그로 결정)
# [Server IP]: 카테고리는 호스트 네임이라고 하지만 IP 주소를 적으면 된다(예. 111.222.333.123).
# [ID]: 접속할 서버의 사용자 ID
# [Port Number]: 외부 접속 허용 포트 번호 (예. 1234)
# 참고 문헌
https://vitux.com/how-to-configure-networking-with-netplan-on-ubuntu/
https://velog.io/@shawnhansh/Ubuntu-%ED%8F%AC%ED%8A%B8%ED%8F%AC%EC%9B%8C%EB%94%A9Portforwarding
https://chrisjhart.com/Windows-10-ssh-copy-id/
# 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기
2023.04.02 - [지식 리뷰/프로그래밍] - 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 2. GPU Setting
2023.04.02 - [지식 리뷰/프로그래밍] - 딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 3. 추가 설정(도커, NFS)
'AI프로그래밍 리뷰 > 프로그래밍' 카테고리의 다른 글
딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 3. 추가 설정(도커, NFS) (0) | 2023.04.02 |
---|---|
딥러닝을 위한 리눅스(Ubuntu) GPU 서버 구축하기 - 2. GPU Setting (0) | 2023.04.02 |
리눅스 터미널에서 텐서플로가 GPU를 잡고 있는지 확인하는 방법 (0) | 2021.08.19 |
리눅스 터미널 백그라운드에서 프로세스 돌리기 (tmux or nohup) (0) | 2020.04.29 |
리눅스 터미널에서 딥러닝 학습 강제 중단했을때 GPU에 남은 메모리 정리하는 방법 (4) | 2020.04.02 |
댓글