사이드 프로젝트에서 배치 서버를 따로 구동해야 하는데 내 개인 미니 PC에서 구동시키기로 했다. 팀원들이 원격으로 접속할 수 있도록 하기 위해서 구글링을 하던 중 host name과 password를 공유하는건 보안에 치명적이라 pem 키를 공유하는 방법을 선택하고 이를 기록한다.
1. SSH 키 생성 (PEM 형식)
클라이언트 측(접속을 시도하는 컴퓨터)에서 SSH 키를 생성해야 한다. 아래 명령어를 실행하여 SSH 키를 생성한다:
ssh-keygen -t rsa -b 4096
키 생성 과정에서 파일을 저장할 경로를 묻는데, 기본 경로(~/.ssh/id_rsa)를 사용해도 되고, 별도의 경로를 지정할 수도 있다. 또한, 패스프레이즈를 설정하면 보안이 강화된다.
SSH 키가 생성되면 두 개의 파일이 생성된다:
- id_rsa: 개인 키 (PEM 파일로 공유할 파일)
- id_rsa.pub: 공개 키
2. 공개 키를 미니 PC에 복사
생성한 공개 키(id_rsa.pub)를 미니 PC에 복사하여 ~/.ssh/authorized_keys에 추가해야 한다. 아래 명령어를 사용한다:
ssh-copy-id -i ~/.ssh/id_rsa.pub 사용자명@미니PC_IP
위 명령어가 실행되면, 클라이언트의 공개 키가 미니 PC의 ~/.ssh/authorized_keys 파일에 추가되어 인증이 가능해진다.
chmod 600 ~/.ssh/authorized_keys
그리고 권한을 파일 소유자만 쓰기 및 읽기 권한을 줌으로써 보안을 강화해야 한다.
3. 팀원에게 공유할 PEM 파일 생성
이 부분은 혼자서만 원격으로 접속할 경우에는 생략해도 된다. 나의 경우 팀원들도 원격으로 접속할 수 있어야 하기 때문에 진행했다.
cat ~/.ssh/개인 키 파일 명
cat 명령어로 팀원들에게 공유할 개인키를 읽어서 텍스트 에디터에 붙여넣은 후 확장자를 .pem으로 바꿔준다.
마찬가지로 팀원들도 chmod 600 명령어로 개인 키 파일 .pem파일의 권한을 수정해야 한다.
수정하지 않으면 이런 오류가 발생한다.
4. 원격 접속
팀원이 PEM 키를 받았다면, 다음과 같이 SSH를 통해 원격으로 접속할 수 있다:
ssh -i /경로/키파일.pem 사용자명@미니PC_IP
여기서 /경로/키파일.pem은 팀원이 받은 PEM 파일의 경로이고, 미니PC_IP는 미니 PC의 IP 주소이다.
* 추가적인 보안을 위한 SSH 설정
보안을 강화하려면 비밀번호 인증을 비활성화하고, 오직 SSH 키를 통한 인증만 허용하는 것이 좋다. 다음 파일을 수정한다:
sudo vi /etc/ssh/sshd_config
아래 설정들을 변경한다:
PasswordAuthentication no
PermitRootLogin no
- PasswordAuthentication no: 비밀번호 인증을 비활성화하여, 오직 SSH 키를 통한 인증만 허용한다. 이렇게 하면 비밀번호 유출로 인한 보안 위협을 줄일 수 있다.
- PermitRootLogin no: 루트 계정으로의 직접 로그인을 비활성화한다. 이를 통해 루트 계정을 통한 해킹을 방지할 수 있다. 사용자는 일반 계정으로 로그인 후, 필요 시 sudo를 통해 권한을 상승시키면 된다.
Default로 주석처리 되어 있는데 해제해주어야 한다.
이후 SSH 서버를 재시작하여 변경 사항을 적용한다:
sudo systemctl restart ssh
기존처럼 접속을 시도하면 Permission denied 에러가 발생하는 것을 알 수 있다.
아래와 같은 명령어로 개인키 파일을 사용해서 접속할 수 있다.
ssh -i 저장경로/개인키파일.pem -p 234 호스트명@미니pc-ip