티스토리 뷰
SSH는 RSA 암호화 알고리즘을 사용하는 보안 접속 프로토콜이다. 서버는 클라이언트의 공개키를 저장하고, 클라이언트는 비밀키를 가지고 있는데, 이 상황을 가지고 클라이언트가 비밀키로 진짜 클라이언트가 맞는지를 검증하는 방식이다.
1. ssh는 22번 포트를 활용하는 보안 원격 접속 프로토콜이다.
2. 접속 시 기본적으로 ssh server는 해당 계정의 비밀번호를 물어보지만 클라이언트에서 ssh key를 생성하여 공개키를 접속할 서버에 등록하면, 계정 비밀번호 대신에 ssh key passpharse로 접속이 가능하다.
2-1 대칭키 기반의 보안을 사용하므로 훨씬 안전하다.
2-2 ssh 키는 간단하게 말하면 비밀번호를 대신해서 특정 파일로 인증한다고 생각하면 된다.
2-3 서버에 ssh 클라이언트의 공개키를 가지고 있고 대칭키 생성 시 입력한 passphrase가 일치하는 경우 인증완료하는 방식이다.
3. ssh 서버를 세팅하는 것은 간단하다.
3-1 아래 명령어로 openssh 서버를 설치한다.
sudo apt install openssh-server
3-2 설정 파일은 /etc/ssh/sshd_config 에 위치한다.
sudo sshd -t -f /etc/ssh/sshd_config
3-3 설정 파일이 변경되면 아래처럼 systemctl을 사용하여 재기동할 수 있다.
sudo systemctl restart sshd.service
4. 클라이언트에서 서버로의 접속은 ssh 명령어로 가능한데 -i 옵션을 부여하면 ssh key로도 접속할 수 있다.
4-1 ssh키를 생성하는 방법은 아래와 같이 할 수 있는데, -b 옵션은 몇 바이트 길이의 키를 생성할지를 지정한다. 기본은 3072바이트이다.
ssh-keygen -t rsa -b 4096
4-2 위의 명령어로 키를 만들면 ~/.ssh 폴더가 생성되고 아래에 id_rsa.pub에 공개키, id_rsa에 비밀키가 저장된다.
4-3 아래의 명령어로 접속하는 서버로 클라이언트가 생성한 공개키를 등록 할 수 있다.
4-3-1 서버에 저장될 파일의 기본 경로는 ~/.ssh/authorized_keys 에 공개키가 저장된다.
4-3-2 공개키가 등록된 클라이언트는 -i 옵션 없이 접근이 가능하다.
ssh-copy-id username@remotehost
5. 공개키를 일일히 복사하기 귀찮은 경우는 github 같은 곳에 ssh공개키를 저장하고 서버에서 import해서 가져오는 방법을 사용한다.
ssh-import-id <username-on-remote-service>
예를 들면
ssh-import-id gh:pilseong
5-1 위의 명령어를 사용하면 서버의 ~/.ssh/authorized_keys 파일에 해당 공개키가 복사된다.
5-2 이처럼 사용하기 위해서는 당연히 먼저 github에 공개키를 등록해야 한다. github에 로그인하고 settings에 메뉴에서 등록가능하다. 아래 링크를 참조한다.
5-3 정상적으로 등록이 된 것을 확인하려면 https://api.github.com/users/yourid/keys 경로로 접근이 가능하다.
6. openssh server의 기본 로그인 방식은 로그인을 시도하는 계정의 비밀번호이다. ssh 키로만 로그인을 허용하고 싶다면 openssh 서버의 설정파일에서 해당 부분을 수정하면 된다. /etc/ssh/sshd_config 파일을 열고
6-1 PasswordAuthentication no
6-2 위와 같이 설정하면 더 이상 비밀번호에 의한 로그인은 허용되지 않는다. Permission deined (publickey) 결과를 반환한다.
'기록' 카테고리의 다른 글
Ubuntu devcontainer에서 github ssh-key 사용하기 (0) | 2022.09.17 |
---|---|
Ubuntu terminal에서 git 상태 표시하기 (0) | 2022.09.17 |
Visual Studio Code: 자바 테스트 코드 작성 시 assertj assertThat 패키지 우선 사용하기 (0) | 2022.07.16 |
데이터베이스 결과값 어디서 만드는 게 좋은가 (0) | 2022.03.05 |
Cross Site에 관련된 내용이 잘 정리된 슬라이드 (0) | 2022.02.01 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib