목적 : SSH(Secure Shell)는 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜입니다.
기본으로 22 Port를 사용하며, 이미 알려진 well-known port 이므로, 무작위 대입 공격을 방지 하는 방법 중 하나로 포트를 변경해서 사용합니다.
본 문서에서는 기운영 중인 OS의 config파일을 변경하여 적용하는 방법과 GCP의 템플릿, 메타데이터를 사용하여 프로젝트 전체에 적용하는 방법을 기술합니다.
유의사항 :
이번 문서에서 GCP 메타데이터, 시작 스크립트를 통한 SSH Port를 변경하는 방법은 다양하게 있습니다.
기본적인 이해를 위해 확인하되, Docs를 참고하여 고객사 상황에 맞게 적용하는 것이 좋습니다.
또한 SSH 접속포트가 변경 되었으므로, 변경한 포트에 대한 방화벽 규칙을 추가, 수정해야 합니다.
- OS에서의 환경설정 파일 변경 방법
OS상에서 구동 중인 ssh 데몬의 환경파일을 수정 후 적용하는 방안입니다.
환경설정 파일 위치
/etc/ssh/sshd_config
sshd_config파일에는 sshd 데몬에 관련된 여러 설정을 적용할 수 있습니다.파일 내용
(ssh접속시 배너 출력, root접속 불가, 최대접속 시도 횟수, Key접속설정등 여러 설정 가능)
1 2 # This is the sshd server system-wide configuration file. See 3 # sshd_config(5) for more information. 4 5 # This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 6 7 # The strategy used for options in the default sshd_config shipped with 8 # OpenSSH is to specify options with their default value where 9 # possible, but leave them commented. Uncommented options override the 10 # default value. 11 12 Include /etc/ssh/sshd_config.d/*.conf 13 14 #Port 22 <-- 변경 내용 15 #AddressFamily any 16 #ListenAddress 0.0.0.0 17 #ListenAddress ::
sshd 설정이 기본일때 14번째 줄에 Port 설정 값이 있습니다.
#은 주석이며, #뒤로 있는 내용은 실제 환경에 적용되지 않습니다.
#Port 22 내용을 → Port “원하는 포트" 로 변경합니다.
본문서에서는 “51547” 로 변경하겠습니다.
변경된 내용
1 2 # This is the sshd server system-wide configuration file. See 3 # sshd_config(5) for more information. 4 5 # This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 6 7 # The strategy used for options in the default sshd_config shipped with 8 # OpenSSH is to specify options with their default value where 9 # possible, but leave them commented. Uncommented options override the 10 # default value. 11 12 Include /etc/ssh/sshd_config.d/*.conf 13 14 Port 51547 <-- 변경 내용 15 #AddressFamily any 16 #ListenAddress 0.0.0.0 17 #ListenAddress ::
변경 후에는 아래의 명령어로 config파일에 대한 내용을 테스트 및 검사합니다.
sudo sshd -t
비정상일 경우는 아래와 같이 오류 위치와 내용을 보여 줍니다.
14번째 줄에 포트 넘버가 잘못되어 있다고 출력되어있습니다.
추가로 원본은 백업하고, config 파일을 지정해서 테스트 한다면 -f 옵션을 사용합니다.
sudo sshd -t -f “파일위치" sudo sshd -t -f /etc/ssh/sshd_config_backup
sudo systemctl restart sshd or sudo service sshd restart
기존 연결된 세션은 종료될때까지 유지되므로, 변경된 포트로 접속 되는지 확인 후 접속종료 합니다.
포트 변경확인
sudo netstat -tnlp
sudo systemctl status sshd
만약 제대로 변경이 안된채로 접속종료가 되면, 기존포트를 사용하거나 종료 후 GCP VM의 시리얼포트 접속 기능을 이용해 복구해야 됩니다.
- GCP Compute Engine의 template 사용하여 적용하기
sshd Config 파일의 변경은 각각의 서버에서 설정이 필요합니다.
template을 사용하여, instance-group이나 template으로 신규생성한 VM에도 별다른 작업없이 적용하는 방안 입니다.
메뉴
Compute Engine > instance-template
고급 옵션 > 관리 > 자동화 > 시작 스크립트
sed -i "s|#Port 22|Port 51547|g" /etc/ssh/sshd_config systemctl restart sshd
or
echo "Port 51547" | sudo tee -a /etc/ssh/sshd_config > /dev/null systemctl restart sshd
sed 명령어는 파일에서 원하는 내용을 추출하거나, 치환하는 작업을 할 수 있습니다.
본문서에서는 치환하는 작업을 위해 사용했고, 사용된 옵션과 뜻은 다음과 같습니다.
sed -i “s|#Port 22|Port 51547|g” sed -i (대소문자 상관없이 적용) “s(파일의 시작)|찾을 문자|변경할 문자|g(파일의 끝)”
본 문서에서는 변수를 사용하지 않으므로 큰따옴표, 작은따옴표 상관없이 사용하여도 됩니다.
echo와 tee 명령어를 사용한 방법은 다음과 같습니다.
echo 명령어는 문자열을 터미널에 출력하는 것입니다.echo "Port 51547" | sudo tee -a /etc/ssh/sshd_config > /dev/null echo "입력할 문자열" | sudo tee -a 앞에서 받아온 문자열을 "파일위치" 에 입력합니다 > /dev/null (화면에 출력되는 메시지는 null처리)하여 안보이게 합니다.
해당 문자열을 tee을 사용하여 sshd_config 파일에 추가합니다.
위 방법은 기존 내용을 수정하는 것이 아닌, 추가하는 것으로 기존내용은 남아있으므로, 환경에 따라 좀 더 맞는 방안으로 진행하면 됩니다.
-
기 구동 중인 VM에 적용
서버가 기동 중인 상태에서 시작 스크립트에 내용을 입력하고, 적용하는 방안입니다.
아래와 같이 메타 데이터에 저장된 스크립트를 실행할 수 있습니다.
sudo google_metadata_script_runner startup
- GCP 메타데이터 사용
스크립트를 사용하여, 프로젝트 전체에 적용을 할 수도 있습니다.
본 문서에서는 스크립트를 Cloud Storage에 저장 후 사용해 보겠습니다.
유의사항 :
ID 및 API액세스 하위의 서비스 계정에 아래의 권한이 있어야 정상적으로 Cloud Storage에 접근이 가능합니다.
스토리지 객체 뷰어 역할(roles/storage.objectViewer)
참고 Docs : https://cloud.google.com/compute/docs/instances/startup-scripts/linux?hl=ko#passing-directly
다음과 같은 스크립트를 작성합니다.
#!/bin/bash sed -i "s|#Port 22|Port 51547|g" /etc/ssh/sshd_config systemctl restart sshd
“인증된 URL 복사" 선택하여 복사합니다.
Compute Engine > 설정 > 메타데이터
수정 > 항목 추가
Key : startup-script-url
Value : “Cloud Storage의 인증된 URL”
예시 Value : https://storage.cloud.google.com/s/ssh_port.sh
이제 해당 프로젝트에서 생성되는 모든 VM은 Port가 변경 됩니다.
- SSH Port 수정 후 접속방법
Putty같은 접속 Tool에는 Port번호를 넣는 란이 있습니다. 변경된 Port 번호를 입력하여 접속합니다.
ssh명령어
ssh -p5147 id@1.1.1.1 ssh -p”포트번호" id@호스트(IP, name)
Compute Engine > VM인스턴스
SSH 화살표 클릭 > 커스텀 포트의 브라우저 창에서 열기
“변경한 Port입력"
- GCP 참고 Docs
https://cloud.google.com/compute/docs/instances/startup-scripts?hl=ko
https://cloud.google.com/compute/docs/metadata/default-metadata-values?hl=ko\
'Cloud > GCP' 카테고리의 다른 글
[GCP] Bigquery DB Tool접속을 위한 SA Key 설정 방안 (0) | 2024.12.09 |
---|---|
[GCP] Shared VPC에서 Service Project별로 권한 설정하기 (0) | 2024.12.02 |
[GCP] Mobile Device Alerting 설정 (0) | 2024.11.25 |
[Security] 서비스 경계 브리지를 사용한 GCP 리소스간 연결방법 (2) | 2024.11.19 |
GCP의 Free Tier로 3-Tire 구축 테스트 내용정리 (0) | 2024.10.16 |
GCP Web console 접근을 위한 X-windows 구성 (0) | 2024.10.16 |
[GCP/OS] GCP compute engine SSH key 발급 및 접속 (0) | 2024.08.21 |