[Bash] ssh 비밀번호 없이 접근하기

2023. 10. 27. 16:12Developers 공간 [Shorts]/Software Basic

728x90
반응형
<분류>
A. 수단
- OS/Platform/Tool : Linux, Kubernetes(k8s), Docker, AWS
- Package Manager : node.js, yarn, brew, 
- Compiler/Transpillar : React, Nvcc, gcc/g++, Babel, Flutter

- Module Bundler  : React, Webpack, Parcel

B. 언어
- C/C++, python, Javacsript, Typescript, Go-Lang, CUDA, Dart, HTML/CSS

C. 라이브러리 및 프레임워크 및 SDK
- OpenCV, OpenCL, FastAPI, PyTorch, Tensorflow, Nsight

 


1. What? (현상)

ssh를 활용해 서버에 접근하는 경우 미리 공개키를 만들어 비밀번호 없이 접근하는 방법을 알고 싶습니다.

 


2. Why? (원인)

  • ssh에서는 암호 대신 key를 활용해 접근할 수 있는데 이는 공개키 방식으로, private keypublic key 한 쌍으로 구성됩니다. 즉, client가 private key를 가지고 암호화(encrypt)를 하면, server가 public key를 가지고 복호화(decrypt)를 합니다.

[https://etloveguitar.tistory.com/143]

  • 연결 순서는 아래와 같으며 그림은 위를 참조합니다.
    1. Client → Server : SSH connection을 요청시작합니다.
    2. Server → Client : 랜덤으로 메시지를 보냅니다.
    3. Client → Server : private key를 사용하여 메시지를 암호화합니다
    4. Server : public key를 사용해 메시지를 복호화합니다.
    5. Server → Client : 메시지가 일치하면 client의 접근을 허용합니다.

3. How? (해결책)

Client에서 Server로 접근할 때, 각각의 PC에서 해야할 방법에 대해 설명하겠습니다.

** Server는 123.456.789.011 이며 port는 8888이라고 가정하겠습니다.

 

1. 먼저 Client에 있는 known_hosts의 목록에서 제거 해줍니다.

ssh-keygen -R 123.456.789.011

# 포트가 있는 경우
ssh-keygen -R [123.456.789.011].8888

아래 위치에 있는 파일을 보면, 내용에 사라진 것을 확인할 수 있습니다.

~/.ssh/known_hosts

 

2. Client에서 키를 생성해 줍니다.

ssh-keygen -t rsa

아래 두가지가 생깁니다. id_rsa는 개인키이고 id_rsa.pub은 공개키이다.

~/.ssh/id_rsa.pub
~/.ssh/id_rsa

다음으로 원하는 위치에 공개키만을 복사해줍니다. (앞서 설명드렸다시피, 서버는 공개키만이 필요합니다.)

scp -r -P 8888 id_rsa.pub user@123.456.789.011:/home/user2/.ssh/id_rsa2.pub

 

3. Server에서 PasswordAuthentication 옵션을 꺼줍니다.
** sshd는 ssh접속(inbound)을 대기하기 위해 돌고 있는 Daemon Process입니다. ssh에 대한 설정은 아래와 달리 /etc/ssh/ssh_config에서 확인할 수 있습니다.

# Check Tutorial
man sshd_config

sudo vim /etc/ssh/sshd_config
PasswordAuthentication no
sudo service sshd restart
sudo systemctl status ssh

 

 

4. Server에서 해당 key를 authorized_keys에 추가해줍니다.

# authorized_keys가 이미 존재하는 경우
cat /home/user2/.ssh/id_rsa2.pub >> ~/.ssh/authorized_keys

# authorized_keys가 없는 경우
cp /home/user2/.ssh/id_rsa2.pub ~/.ssh/authorized_keys

이제 비밀번호 없이 접근이 가능합니다.


https://etloveguitar.tistory.com/143

728x90
반응형