본문 바로가기
320x100
320x100

먼저 https://code-boki.tistory.com/140

 

원격 서버 접속하기(2) - ssh 접속(feat. ID/PW)

https://code-boki.tistory.com/135 원격 서버 접속하기(1) - telnet/ssh 입사를 해서 회사 일을 해보면, 이런 단어들을 들어볼 수 있을 것이다 로컬 서버, 개발 서버, 스테이징 서버, 배포 서버, 테스트 서버 등

code-boki.tistory.com

이 글을 보고 오면 좋을 것 같다

 

일전의 테스트와 같이 내 개인 맥북 2개로 SSH를 실습하며 동작과정을 알아볼 것이다

현재 맥북(SSH 클라이언트) - 192.168.123.101

whoami
ifconfig | grep inet | grep 192.168.123

맥북1 - boki(192.168.123.101)

접속할 맥북(SSH 서버) - 192.168.123.104

whoami
ifconfig | grep inet | grep 192.168.123

맥북2 - tester(192.168.123.104)

 

 

개인키/공개키 방식의 SSH 접속을 테스트하기 전에 공개키/개인키를 생성하는 방법에 대해서 알 필요가 있다

 

공개키 / 개인키 생성하기

https://code-boki.tistory.com/139

 

개인키 파일 인코딩 종류 for SSH

SSH Client로 원격 서버에 접속하기 위한 방법으로는 2가지가 있다 1. ID / PW 2. 개인키 인증서 이번에는 개인키 인증서로 사용할 수 있는 파일들에 대해 알아보려고 한다 이 파일들을 알기 위해서는

code-boki.tistory.com

macOS에서 테스트를 할 것이므로 OpenSSHPEM방식을 테스트해본다

  1. 공개키/개인키 쌍을 ssh-keygen으로 만든다 <<-----------------------
  2. 공개키를 ssh-copy-id 명령어를 통해 서버로 전송한다
  3. ssh -i 를 통해 개인키 파일과 함께 서버에 접속을 시도한다

이번 포스팅에서는 1번을 포스팅한다

 

키 생성 명령어 사용방법

man ssh-keygen

ssh-keygen 사용설명서(manual)

 

ssh-keygen

-t: key algorithm

-b: bit key 길이

-f: 저장할 파일명, 경로지정가능

-C: 주석(공개키에 추가됨)

-N: 개인키 파일에 엑세스하는데 사용하는 추가암호

 

간단하게 key 알고리즘 종류에 대해서 알아보자

key 알고리즘 종류

  • RSA(rivest-shamir-adleman)
    • 가장 널리 알려진 공개키 암호화 디지털 서명 알고리즘
    • 큰 정수의 소인수분해의 어려움에 기반
    • 충분히 큰 키 크기를 사용할 때 안전하지만, 키 크기가 커질수록 연산 속도가 느려짐. 최근에는 ECDSA나 ED25519같은 더 효율적인 알고리즘이 사용되는 추세
  • DSA(Digital Signature Algorithm)
    • 주로 디지털 서명 생성 및 검증에 사용
    • 공개키와 개인키를 사용하며 서명을 생성하고, 이 서명을 다른 사용자들이 공개키를 통해 검증 가능
    • DSA는 안전하고 키 크기가 커질수록 보안성은 강화되지만 현대에는 다른 알고리즘들에 비해 덜 사용됨
  • ECDSA(Elliptic Curve Digital Signature Algorithm)
    • 디지털 서명에 사용되며 DSA의 타원 곡선 버전
    • 타원 곡선 암호학을 기반으로 하며, 더 작은 크기로도 높은 보안 수준을 제공
    • DSA보다 효율적이며 보안성이 높아 널리 사용
  • ECDSA-SK (Elliptic Curve Digital Signature Algorithm with Security Key)
    • ECDSA와 유사하지만, 하드웨어 보안 키(FIDO U2F)를 사용하여 서명 과정에 추가적인 보안 요소를 제공
    • 이 방식은 서명을 생성할 때 하드웨어 키의 물리적 인터렉션이 필요. 이로 인해 보안성이 더욱 강화됨
  • Ed25519
    • 디지털 서명에 사용되며, ECC알고리즘(타원 곡선)을 사용
    • 높은 보안성과 빠른 연산속도를 제공하며, 난수 의존성이 낮음
    • 매우 강력한 보안성을 제공하며, 작고 빠른 서명을 가능하게 함
  • Ed25519-SK (Ed25519 with Security Key)
    • Ed25519와 유사하지만, 보안 키를 사용하며 서명 과정에 추가적인 보안 요소를 제공함
    • 하드웨어 보안 키를 사용하며 물리적인 보안 요소를 추가함으로써 보안 요소를 높임

ssh-keygen 사용 예

openSSH

1. 기본경로 생성/RSA/4096

ssh-keygen -t rsa -b 4096

만들어질 파일 위치를 묻는다(기본경로 ~/.ssh)

passphrase는 개인키에 대한 암호를 한번 더 설정한다(enter를 누르면 빈 값으로 처리)

이 명령어는 기본적으로 ~/.ssh 경로에 id_rsa(개인키), id_rsa.pub(공개키) 파일을 생성한다

-f 옵션을 안주면 기본적으로 id_[키 파일알고리즘명] 형식으로 저장된다

pub는 public의 줄임말이다

또한 -C 옵션으로 공개키에 주석을 작성하지 않으면, 해당 컴퓨터의 사용자 이름으로 지정이된다

 

[ 생성된 개인키 ]

head -n 2 ~/.ssh/id_rsa && tail -n 2 ~/.ssh/id_rsa

개인키

간단하게 head와 tail 명령어로 파일의 상단 2, 하단 2번째 부분을 && 로 합쳐서 확인해본다

 

[ 생성된 공개키 ]

cat ~/.ssh/id_rsa.pub

공개키는 개인키와 달리 1줄로 쭉 작성되기 때문에 head, tail 명령어 등을 사용 못하고, 굳이 짤라서 봐야 된다면 cut 등의 명령어를 사용해야된다

cat ~/.ssh/id_rsa.pub | cut -c 1-50

 

 

2. 다른 경로에 생성/RSA/4096/개인키 비밀번호 없음

ssh-keygen -t rsa -b 4096 -f ~/.ssh/my-key -N ''

-f 옵션이 없다면 알고리즘명으로 파일명이 정해지는데에 비해,

-f 옵션으로 경로를 설정해줘서 .ssh 숨김폴더 경로에 my-key(개인키), my-key.pub(공개키)가 생성된다

또한 -N 옵션으로 passphrase를 미리 없는 값으로 넣어줬다

 

[ 생성된 개인키 ]

head -n 2 ~/.ssh/my-key && tail -n 2 ~/.ssh/my-key

 

[ 생성된 공개키 ]

cat ~/.ssh/my-key.pub

 

3. 다른 경로에 생성/RSA/4096/개인키 비밀번호 있음

ssh-keygen -t rsa -b 4096 -f ~/.ssh/my-pw-key -N '1234'

passphrase값을 주면 개인키 파일을 쓸 때마다 password를 입력하게 된다(아래에서 테스트)

-N 옵션으로 사용이 가능하다

 

[ 생성된 개인키 ]

head -n 2 ~/.ssh/my-pw-key && tail -n 2 ~/.ssh/my-pw-key

[ 생성된 공개키 ]

cat ~/.ssh/my-pw-key.pub

4. 다른 경로에 생성/RSA/4096/개인키 비밀번호 없음/공개키 주석 추가

ssh-keygen -t rsa -b 4096 -f ~/.ssh/my-boki-key -N '' -C 'https://code-boki.tistory.com'

 

-C 옵션을 주면 공개키에 주석을 추가하게 된다

보통은 계정명@ip주소 로 주석을 적어둔다

[ 생성된 개인키 ]

head -n 2 ~/.ssh/my-boki-key && tail -n 2 ~/.ssh/my-boki-key

 

[ 생성된 공개키 ]

cat ~/.ssh/my-boki-key.pub | grep https://code-boki.tistory.com

 

 

공개키의 끝부분에 보면 -C 옵션으로 작성한 주석부분이 추가된 것을 볼 수 있다

 

 

PEM(Privacy Enhanced Mail)

1. 다른 경로에 생성 및 확장자 추가/RSA/4096/개인키 비밀번호 없음/파일 형태 PEM

ssh-keygen -m PEM -t rsa -b 4096 -N '' -f ~/.ssh/my-pem-key.pem

openSSH와 동일한 형식이지만 -m PEM 옵션을 붙여주고, -f 옵션에 .pem 확장자를 붙여주면 된다

2개의 개인키/공개키 쌍이 생긴 것을 볼 수 있다

 

2. 여러줄에 \ 로 입력(OpenSSH도 동일함)

ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "tester@192.168.123.104" \
    -f ~/.ssh/my-second-pem-key.pem \
    -N ''

명령어를 단순히 여러줄로 입력하고 싶다면 \ (역슬래시)를 이어서 명령어를 작성하면 된다

간단한 tab(\t) 정도는 넣어주면 이쁘다

cat .ssh/my-second-pem-key.pem.pub | grep tester@

[ Cloud ]

나중에 또 포스팅하겠지만, AWS/GCP/Azure 등에서 접속하려면 키 파일 권한을 400(본인만 읽기 가능)으로 변경해야 한다

너무 큰 권한이나 너무 작은 권한을 줘도 접속이 안되는 것을 볼 수 있다

chmod 400 ~/.ssh/XXX.pem

 

 

[ Additional ]

예제는 전부 rsa 키 알고리즘을 사용했지만, ed25519 등의 키 알고리즘을 사용해서 만드는 것도 좋은 방법이다

(타원곡선 형태로, 더 작은 키 크기로 높은 보안 수준을 유지)

 

참고로 ed25519는 고정된 256 bit 키를 사용하기 때문에 -b 옵션을 줄 필요가 없다

ssh-keygen -t ed25519

-f 옵션을 주지 않았으므로 id_[키 알고리즘] 형태로 공개키/개인키가 생성된 것을 볼 수 있다

320x100

댓글