먼저 https://code-boki.tistory.com/140
이 글을 보고 오면 좋을 것 같다
일전의 테스트와 같이 내 개인 맥북 2개로 SSH를 실습하며 동작과정을 알아볼 것이다
현재 맥북(SSH 클라이언트) - 192.168.123.101
whoami
ifconfig | grep inet | grep 192.168.123
접속할 맥북(SSH 서버) - 192.168.123.104
whoami
ifconfig | grep inet | grep 192.168.123
개인키/공개키 방식의 SSH 접속을 테스트하기 전에 공개키/개인키를 생성하는 방법에 대해서 알 필요가 있다
공개키 / 개인키 생성하기
https://code-boki.tistory.com/139
macOS에서 테스트를 할 것이므로 OpenSSH와 PEM방식을 테스트해본다
- 공개키/개인키 쌍을 ssh-keygen으로 만든다 <<-----------------------
- 공개키를 ssh-copy-id 명령어를 통해 서버로 전송한다
- ssh -i 를 통해 개인키 파일과 함께 서버에 접속을 시도한다
이번 포스팅에서는 1번을 포스팅한다
키 생성 명령어 사용방법
man ssh-keygen
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_[키 알고리즘] 형태로 공개키/개인키가 생성된 것을 볼 수 있다
'OS > Unix' 카테고리의 다른 글
원격 서버 접속하기(4) - ssh 접속(feat. 개인키/공개키로 접속) (2) | 2023.12.01 |
---|---|
원격 서버 접속하기(2) - ssh 접속(feat. ID/PW) (0) | 2023.11.30 |
원격 서버 접속하기(1) - telnet/ssh (2) | 2023.11.20 |
댓글