본문 바로가기

Posts/Server

백엔드 개발자가 알아두면 좋은 리눅스 명령어 및 로직

반응형

SSH

Secure Shell의 약자로 원격에 있는 컴퓨터를 안전히 제어하기 위한 프로토콜, 프로토콜 프로그램을 말합니다. SSH 클라이언트와 SSH 서버의 상호작용으로 SSH 서버에 접속하여 설치된 운영체제를 제어할 수 있습니다. 클라이언트와 서버 사이에 강력한 보안 및 암호화 방식을 통해 연결되어 있습니다. 중간에 주고 받는 비밀번호, 카드 정보 등 데이터 정보를 가로채도 해석할 수 없는 암호로 되어 있어 보안상의 이점을 제공하는 역할을 합니다. 가장 대표적 예는 사용자가 컴퓨터 시스템에 원격으로 로그인하는 것입니다. Git의 경우도 Github은 기본적으로 SSH를 지원하고 있습니다.

SSH Client

리눅스, macOS와 같은 유닉스 계열의 OS는 기본적으로 SSH 클라이언트와 서버가 설치되어 있기에 특별히 사용하는 클라이언트 프로그램은 없지만 윈도우의 경우 PuTTY를 많이 사용합니다.

SSH Server

SSH는 Unix 계열의 OS를 원격에서 제어하기 위한 방법으로 원격지에 있는 서버도 SSH가 설치되어 있어야 합니다. 이 때문에 윈도우의 경우 OpenSSH를 설치하여 제어할 수 있습니다. (mac에서는 터미널을 통해 쉽게 접속 가능)


1. Server 접속, 동작 방식

기본 개념은 웹 브라우저의 사용자와 API 서버 개념과 비슷합니다. http 프로토콜, ssh 프로토콜등 각각의 통신에 맞는 프로토콜을 사용하여 안전한 보안을 기반으로 접속하는 것을 말합니다.

SSH Key

보통 원격 서버에 접속시 비밀번호를 입력해야하나 이를 대신하는 방법으로 key를 이용할 수 있습니다. 이는 비밀번호보다 높은 수준의 보안이 필요하거나 key를 등록해놓고 로그인 없이 자동으로 접속하고 싶을때 이용합니다.

SSH Key 동작 방식

SSH Key는 private key(클라이언트측), public key(서버측)로 이루어져 있습니다. 키를 제일 처음 생성시 공개와 비공개 키로 만들어집니다. 이중 비공개는 우리가 사용하고 있는 로컬컴퓨터측에 위치, 즉 클라이언트가 되고 공개키의 경우 원격컴퓨터측(서버)에 위치하게 됩니다.


동작 방식은 SSH 접속 시도시 클라이언트의 비공개키가 원격지의 공개키를 비교해서 둘이 일치하는지 비교하여 접속합니다.

SSH Key 생성 방법 및 사용

  1. SSH Key 확인
    1. $ cat ~/.ssh/id_rsa.pub
    2. ssh-rsa로 시작하는 문자열이 있으면 이미 SSH 키 쌍이 존재하는 것이므로 해당 SSH Key를 사용
    3. 없으면 No such file or directory
  2. SSH Key Pair 생성
    1. $ ssh-keygen -t rsa (-t: 암호화 타입 옵션 지정, rsa 방식으로 생성)
  3. SSH Key 파일 확인
    1. $ ls -al ~/.ssh
  4. 접속할 원격서버에 id_rsa.pub 파일 전송
    1. $ scp 파일경로/파일명 계정명@타겟서버명:도착경로/파일명
  5. .ssh 위치에 authorized_keys 파일 생성 후 id_rsa.pub 복사
    1. 디렉토리 생성 $ mkdir .ssh
    2. private key 추가 $ cat id_rsa.pub >> .ssh/authorized_keys
id_rsa id_rsa.pub authorized_keys
private key, 타인에게 노출 x public key 접속하려는 원격 머신의 authorized_keys에 입력 원격지의 .ssh 디렉토리 내에 id_rsa.pub 키값을 저장

SSH Permission

  • chmod 700 $ ~/.ssh
  • chmod 600 $ ~/.ssh/id_rsa
  • chmod 644 $ ~/.ssh/id_rsa.pub
  • chmod 644 $ ~/.ssh/authorized_keys
  • chmod 644 $ ~/.ssh/known_hosts

SSH Debug

  • $ ssh 계정이름@서버이름 -v
  • 다른 위치에 있는 키를 가지고 접속시
    • $ ssh -i 계정이름@서버이름 (포트를 적지 않으면 기본 포트 22)
    • $ ssh -i 계정이름@서버이름 -p변경포트번호

SSH Port Settings

  • $ vi /etc/ssh/sshd_config

SSH public keys

  • $ cd /home/계정이름/.ssh
  • $ cat authorized_keys -> public key
    • private key pair (private과 public의 키 매칭)

2. SCP

scp는 secure copy의 약자로 로컬 호스트와 원격 호스트 또는 두 개의 호스트 간에 파일을 전송하는 수단입니다. SSH(Secure Shell)을 통한 파일 전송 방식이며 별도의 FTP 클라이언트를 설치하지 않아도 파일 송수신이 가능합니다.

SCP 사용법

로컬에서 원격으로 파일을 전송할 때

  • $ scp 파일경로/파일명 계정명@타겟서버명:도착경로/파일명

원격에서 로컬로 파일을 전송할 때

  • scp 계정명@서버명:파일경로/파일명 도착로컬경로

ex) scp -pr ./send naddru@10.10.10.10:./receive

SCP option

  • r : 하위 폴더를 포함하여 모두 복사하는 Recursive

  • p : 권한 및 속성을 유지하는 Preserve

  • c : 압축을 실시하는 Compress 옵션 등이 있습니다.


3. IP 조회

대표적인 명령어로는 ifconfig를 이용하며 내부(사설) IP 주소와 외부(공인) IP 주소를 구분해서 확인할 수 있습니다.

내부 사설 IP
  • $ ifconfig | grep inet
외부 공인 IP (외부로 나가는 하나의 IP, 통신사 연결 IP)
  • $ curl ifconfig.me
  • $ curl ifconfig.co

4. curl

웹사이트 검증을 위한 명령어입니다. GET, POST등 요청을 보낼 수 있으며 header, json 파라미터등의 옵션도 함께 구현할 수 있습니다.

  • $ curl google.com -> 301
  • $ curl https://www.google.com -> 실제 사이트 정보
  • curl 뒤에 옵션 -v를 붙이면 content-type, xss등 server certificate 정보가 함께 보여짐

5. Domain IP 조회 명령어

도메인 질의 명령어로는 nslookup을 사용하여 해당 IP를 조회할 수 있습니다.

5-1. 명령어
  • $ nslookup google.com

image

반응형

'Posts > Server' 카테고리의 다른 글

AWS ElasticBeanstalk으로 토이프로젝트 배포하기  (0) 2021.11.14