SSH 키를 사용하면 비밀번호 입력 없이 안전하게 서버에 접속할 수 있습니다. 이 글에서는 로컬 머신에서 SSH 키를 생성하고, 타겟 서버에 적용하여 패스워드 없이 로그인하는 방법을 단계별로 설명합니다.

 

1. 로컬 머신에서 SSH 키 생성하기

우선, 로컬 머신에서 SSH 키를 생성합니다. 이미 SSH 키가 생성되어 있다면 이 단계를 생략해도 됩니다.

SSH 키 생성 명령어:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

위 명령을 실행하면 id_rsa (비밀 키)와 id_rsa.pub (공개 키) 파일이 생성됩니다. 기본적으로 ~/.ssh/ 디렉토리에 저장됩니다.

  • id_rsa: 비밀 키 (Private Key)
  • id_rsa.pub: 공개 키 (Public Key)

 

2. 타겟 서버에 공개 키 추가하기

SSH 키를 생성한 후, 타겟 서버에 공개 키를 추가해야 합니다. 이를 위해 두 가지 방법을 사용할 수 있습니다.

ssh-copy-id 명령어 사용하기

ssh-copy-id -i /root/.ssh/id_rsa.pub 사용자명@타겟서버주소

이 명령어는 자동으로 공개 키를 타겟 서버의 ~/.ssh/authorized_keys 파일에 추가합니다.

 

 

3. 패스워드 없는 접근 확인하기

타겟 서버에 공개 키를 성공적으로 추가한 후에는 SSH 비밀 키를 사용하여 패스워드 없이 타겟 서버에 접속할 수 있습니다.

접속 명령어:

ssh -i /root/.ssh/id_rsa 사용자명@타겟서버주소

이 명령어는 비밀 키 파일을 사용하여 타겟 서버에 접속합니다. 패스워드를 입력할 필요 없이 안전하게 서버에 접근할 수 있습니다.

 

postgresql 13버전 설치

yum update -y

 

cd > [to workspace]

 

wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

 

yum install -y pgdg-redhat-repo-latest.noarch.rpm

 

sudo yum install -y postgresql13 postgresql13-server

 

sudo /usr/pgsql-13/bin/postgresql-13-setup initdb

 

sudo systemctl start postgresql-13

 

sudo systemctl enable postgresql-13

 

 

postgresql 계정 설정

sudo -i -u postgres

psql

CREATE USER testuser WITH PASSWORD 'test2020@' ;

ALTER USER testuser WITH SUPERUSER ;

\du

 

database 생성

CREATE DATABASE test OWNER testuser ;

GRANT ALL PRIVILEGES ON DATABASE test TO testuser ;

\l 

 

접속 권한 설정

sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /var/lib/pgsql/13/data/postgresql.conf

echo "host    all             all             0.0.0.0/0               md5" | sudo tee -a /var/lib/pgsql/13/data/pg_hba.conf

 

 

postgresql 설정 적용 재실행

sudo systemctl restart postgresql-13

sudo systemctl status postgresql-13

 

 

Dbeaver 등 tool을 이용 접속 확인

 

sudo yum install epel-release (CentOS)

sudo amazon-linux-extras install epel (Amazon linux2)

 

서버에 침해사고가 발생했을 때 last 명령어로 최근 접속에 대한 정보를 알아야 한다.

개발자나 서버 운영자 개인 계정에 전체 권한을 주지 않고 필요한 계정의 권한과 명령어를 alias에 등록해서 사용하게 하면

계정별 접속 정보를 last명령어로 확인 할 수 있다.

 

예시에선 tomcat 계정이 tomcat 디렉터리와 데몬에 대한 권한을 가졌고, testuser는 개발자의 개인 계정이라고 설정한다.

 

testuser 계정에서 명령어를 실행

vi /home/testuser/.bashrc
# .bashrc
alias logview='su - tomcat -c "tail -f /home/tomcat/logs/catalina.out"'

tomcat 계정의 패스워드를 입력하면 tomcat 로그를 확인 할 수 있다.

로그뷰 외에 톰캣 실행, 정지 등 필요한 명령어를 alias에 등록하여 tomcat 계정 사용을 방지하고 개인 계정 사용을 장려한다.

alias

명령어 사용 시 현재 계정에 등록 된 alias 확인 가능

https://yes5.tistory.com/28

 

EC2 - S3 파일 복사

EC2 서버와 S3 버켓은 구축 되어 있다고 가정하고 시작한다. 안 되어 있다면 https://yes5.tistory.com/29 AWS EC2 생성 (ubuntu 프리티어) EC2 검색 > 인스턴스 인스턴스 시작 클릭 이름 지정 OS 선택 (여기선 ubun

yes5.tistory.com

위 게시물에서 EC2 - S3 간 통신을 다뤘습니다.

이제 로그 백업 시스템을 만들어 보겠습니다.

 

 

vi /home/script/wasbck.sh

#!/bin/bash

# Hostname
HOSTNAME='TWAS01'
#HOSTNAME=`hostname -f`

# Date
# Date 함수 기반 포멧 지정
DATEYMDM=$(date +"%Y-%m-%d" -d '1 days ago')
DATEYMD=$(date +"%Y%m%d" -d '1 days ago')
DATEYM=$(date +"%Y%m" -d '1 days ago')
DATED=$(date +"%d" -d '1 days ago')

# Dir
# tomcat, S3 경로
TOMDIR='/etc/tomcat/logs'
WLOGDIR='/etc/tomcat/was_logs'
S3DIR='s3://kimohseong-test/was'

# 1.copy catalina.out log
aws s3 cp ${TOMDIR}/catalina.out-${DATEYMD}.gz ${S3DIR}/${DATEYM}/${DATED}/${HOSTNAME}/catalina.out.${DATEYMDM}.gz

# 2.copy tomcat log
# 2-1.log 압축
tar zcvfP ${WLOGDIR}/catalina.${DATEYMDM}.log.gz ${TOMDIR}/catalina.${DATEYMDM}.log
tar zcvfP ${WLOGDIR}/localhost.${DATEYMDM}.log.gz ${TOMDIR}/localhost.${DATEYMDM}.log
tar zcvfP ${WLOGDIR}/localhost_access_log.${DATEYMDM}.txt.gz ${TOMDIR}/localhost_access_log.${DATEYMDM}.txt

# 2-2 copy to s3
aws s3 cp ${WLOGDIR}/catalina.${DATEYMDM}.log.gz ${S3DIR}/${DATEYM}/${DATED}/${HOSTNAME}/catalina.${DATEYMDM}.log.gz
aws s3 cp ${WLOGDIR}/localhost.${DATEYMDM}.log.gz ${S3DIR}/${DATEYM}/${DATED}/${HOSTNAME}/localhost.${DATEYMDM}.log.gz
aws s3 cp ${WLOGDIR}/localhost_access_log.${DATEYMDM}.txt.gz ${S3DIR}/${DATEYM}/${DATED}/${HOSTNAME}/localhost_access_log.${DATEYMDM}.txt.gz

#Hostname

서버에서 Hostname을 지정했다면 #HOSTNAME=`hostname -f` 부분의 주석을 풀고 사용

 

#Date

위 스크립트에선 파일 전송을 새벽에 할 계획이기 때문에 로그 저장 날짜를 전송 날짜 전일로 지정

전송 날짜로 지정 하신다면 #Date 부분에 -d '1 days ago' 를 제외하시면 됩니다.

 

#Dir

예시는 tomcat 기준의 경로이며 기본 디폴트 경로가 아님. 필요한 로그의 데몬 경로에 맞게 지정 후 사용

S3DIR 경로도 자신의 버켓 주소로 변경

 

#copy

EC2 서버에 7일, bucket에 90일 저장 후 글래시어에 보낼 계획이기 때문에 mv 명령어 대신 cp 사용

이후 crontab에 삭제 명령어 추가

 

 

crontab -e

0 4 * * * /home/script/wasbck.sh
0 5 * * * find /etc/tomcat/logs/ -type f -mtime +7 -delete
0 6 * * * find /etc/tomcat/was_logs/ -type f -mtime +7 -delete

service crond restart

 

 

 

 

 

보통 EC2 인스턴스를 생성하거나, 복제할 때 키 페어를 생성 및 선택한다.

혹은 EC2 검색 > 네트워크 및 보안 > 키 페어에서 키 페어 생성 및 수정이 가능하다.

 

ssh client로 xshell 사용자는 .pem

putty 사용자는 AWS 인스턴스 키페어 생성 시 .ppk로 생성

xshell로 진행

 

연결 탭에서 호스트를 접속 할 퍼블릭 IP로 입력하고,

 

사용자 인증 탭에서 사용자 이름 (최초 접속 시 ec2-user) 입력 방법을 Password 클릭

 

분명 인증 방법으로 Password 방식을 선택했지만 key로만 접근이 가능한 상황.

우선 생성한 키 페어로 접속.

찾아보기 > 키 페어 선택 

암호는 입력하지 않아도 된다. ( ec2-user 접속 시 )

이제 password를 이용한 인증을 적용해 보자.

 

 

sudo vi /etc/ssh/sshd_config

PasswordAuthentication

no > yes 변경

sudo service sshd restart

sshd 재실행

 

sudo passwd ec2-user

 

ec2-user 패스워드 설정

설정한 패스워드 입력

 

 

+ Recent posts