프로토콜
컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계
SSH란 Secure Shell Protocol, 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜입니다. 대표적인 사용의 예는 다음과 같습니다.
1.
데이터 전송
a.
깃허브에 푸시할 때, ec2에 파일을 보낼 때
- name: Deploy to EC2
if: github.event_name == 'pull_request'
uses: appleboy/scp-action@master
with:
host: ${{ secrets.MPT_HOST }}
username: ${{ secrets.MPT_USERNAME }}
key: ${{ secrets.MPT_PRIVATE_KEY }}
source: "dist/*"
target: "/home/ubuntu/mptfront/my-paldo-trip-fe"
JavaScript
복사
프론트엔드 main.yml
2.
원격 제어
a.
aws ec2 서버 설정을 할 때
git bash를 통해 ec2에 접속할 때
- name: Pull Docker Image and Compose up
env:
TIMESTAMP: ${{ steps.timestamp.outputs.timestamp }}
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.MPT_HOST }}
username: ${{ secrets.MPT_USERNAME }}
key: ${{ secrets.MPT_PRIVATE_KEY }}
script: |
sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/mpt:$TIMESTAMP
sudo docker stop $(sudo docker ps -q)
sudo docker rm $(sudo docker ps -aq)
export TIMESTAMP=${{ steps.timestamp.outputs.timestamp }};
sudo -E docker-compose up -d
sudo docker system prune -a -f --volumes
JavaScript
복사
백엔드 main-flow.yml
왜 굳이 ssh?
•
FTP (File Transfer Protocol)
◦
TCP/IP 를 통해 파일을 송수신하기 위해 고안된 프로토콜
◦
대량의 파일을 처리할 때 사용, 웹 개발 시 유용, 폐쇄형 시스템 내에서 대량의 서버 배치 파일을 간단하게 전송
◦
빠른 파일 송수신이 목적이므로 보안이 취약
•
SFTP (SSH File Transfer Protocol)
◦
SSH 데이터 스트림을 통해 보안 등급이 높은 파일 전송을 실현하는 별도의 프로토콜
◦
ssh와 같은 방식을 사용하고 ssh포트인 22번 포트 사용
•
텔넷(Telnet)
◦
원격 접속 서비스로서 특정 사용자가 네트워크를 통해 다른 컴퓨터에 연결하여 그 컴퓨터에서 제공하는 서비스를 받을 수 있도록 하는 인터넷 표준 프로토콜
◦
네트워크에 있는 컴퓨터를 자신의 컴퓨터처럼 파일 전송, 파일 생성, 디렉토리 생성 등을 자유롭게 할 수 있다
◦
사용자가 쓰기에는 텔넷과 SSH는 차이점이 없음
◦
텔넷은 정보를 byte스트림형식으로 주고 받고, ssh는 DES, RSA 등 고급 암호화를 통해 통신
◦
SSH는 암호화 뿐만 아니라 압축 기술도 사용하는데, 암호화 때문에 트래픽이 텔넷보다 크게 늘어나지 않습니다. 단지 약간의 부하가 더 생길수도 있음
SSH 암호화 방식
•
public key : 공개키, 암호화 할 때 사용
•
private key : 개인키, 복호화 할 때 사용
•
대칭키 비대칭키를 혼합한 암호화 방식 ( https와 비슷)
◦
비대칭키 방식은 대칭키 방식에 비해 자원을 많이 소모하고 속도가 느리기 때문
•
SSH 접속은 해당 개인 키를 사용하여 인증, 개인 키를 사용하여 서버에 접속하면 해당 키에 대한 공개 키가 서버의 ~/.ssh/authorized_keys 파일에 등록되어 있는지 확인해야 한다.
◦
개인 키와 서버에 등록된 공개 키가 일치해야만 접속이 성공
◦
개인 키와 서버에 등록된 공개 키가 일치하지 않는다면, SSH 연결은 실패하고 "Permission denied"와 같은 오류 메시지가 표시
pem 파일
•
Privacy Enhanced Mail
•
보안 웹 사이트를 인증하는데 사용되는 인증서를 Base64 인코딩 된 파일
•
각자의 공개키, 개인키 세트를 키페어(key pair) 라고 부름
•
보통 공개키의 경우 .pub, 개인키의 경우 .pem 의 파일 형식
SCP(secure copy) 와 SFTP의 차이
참고자료