SSH

luneah·2022년 7월 8일
1

Developer

목록 보기
13/16
post-thumbnail

SSH

SSH(Secure Shell)는 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜이다. 기존의 유닉스 시스템 셸에 원격 접속하기 위해 사용하던 텔넷은 암호화가 이루어지지 않아 계정 정보가 탈취될 위험이 높으므로, 여기에 암호화 기능을 추가하여 1995년에 나온 프로토콜이다.(SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 보인다.) 셸로 원격 접속을 하는 것이므로 기본적으로 CLI 상에서 작업을 하게 된다.

SSH 키(key)


서버에 접속할때 비밀번호 대신 key를 제출하는 방식이다. 비밀번호보다 높은 수준의 보안요건을 필요로 할때 사용된다.

동작하는 방식

SSH 키(Key)는 공개 키(public key)비공개 키(private key)로 이루어지는데 이 두개의 관계를 이해하는 것이 SSH Key를 이해하는데 핵심이다. 키를 생성하면 공개 키와 비공개 키가 만들어진다. 이 중에 비공개 키는 로컬 머신에 위치해야 하고, 공개 키는 리모트 머신에 위치해야 한다.(로컬 머신은 SSH Client, 원격 머신은 SSH Server가 설치된 컴퓨터를 의미) SSH 접속을 시도하면 SSH Client가 로컬 머신의 비공개 키와 원격 머신의 비공개 키를 비교해서 둘이 일치하는지를 확인한다.

주요 기능

  • 보안 접속을 통한 rsh, rcp, rlogin, rexec, telnet, ftp 등 제공
  • IP spoofing (IP스푸핑, 아이피 위/변조 기법중 하나)을 방지하기 위한 기능 제공
  • X11 패킷 포워딩 및 일반적인 TCP/IP 패킷 포워딩을 제공

SSH Key 만들기

macOS는 유닉스 계열의 운영체제로 OpenSSH를 기본으로 포함하고 있기 때문에 ssh-keygen을 사용해 간단히 key를 생성할 수 있다.

$ ssh-keygen -t rsa
# -t옵션으로 어떤 타입의 암호화 방식을 사용할 것인지 지정할 수 있다.(default가 rsa)

이제 어디에 key를 생성하여 저장할지를 묻는다. 엔터를 누르면 기본경로에 저장된다. 다른 경로를 원한다면 입력해주면 된다.

Generating public/private rsa key pair.
Enter file in which to save the key (기본경로):

다음은 ssh를 사용할때 비밀번호를 사용할지를 묻는다. 당연히 비밀번호를 설정하면 설정하지 않는것 보단 더 안전하다. 이 과정이 끝나면 key가 생성된다.

Created directory '경로'
Enter passphrase (empty for no passphrase):

key를 확인하고 싶다면 저장한 경로로 이동하면 된다.

$ ls -al /경로/

total 16
drwx------   4 user  staff   128  6  7 15:07 .
drwxr-xr-x+ 31 user  staff   992  6  7 15:05 ..
-rw-------   1 user  staff  1876  6  7 15:07 id_rsa
-rw-r--r--   1 user  staff   403  6  7 15:07 id_rsa.pub

이때 id_rsa개인 키, id_rsa.**pub**공개 키이다. 권한을 보면 개인 키는 사용자만이 읽고 쓸 수 있고(600), 공개 키는 다른 사용자도 읽을 수 있는 권한(644)을 가지고 있다. 접속하고자 하는 컴퓨터에 공개 키을 등록해 놓으면, 이후 SSH로 접근할 때 개인 키와 비교하여 인증한다.

# scp를 통해 원격컴퓨터에 공개키를 전송(다른방법도 상관없다)
$ scp [경로]/id_rsa.pub user@sever_ip:id_rsa.pub

macOS는 기본적으로 SSH Server가 설치되어 있다. macOS를 서버로 사용하고 싶다면 시스템환경 > 공유 에서 원격 로그인을 체크하면 외부에서 SSH를 통해 접근 가능하다.

이제 원격 컴퓨터에서는 전달받은 id_rsa.pub를 authorized_keys파일에 등록한다. 만약 .ssh폴더가 없다면 새로 만들고 chmod 700로 설정해준다. (중요한 정보가 저장되어 있기 때문에 소유자 외에 접근이 불가능하게 해줘야 한다.)

# 원격컴퓨터에 authorized_keys에 리다이렉션(추가) 해준다.
$ cat $HOME/id_rsa.pub >> $HOME/.ssh/authorized_keys

이제 SSH를 통해 접속 가능하다.

$ ssh user@sever_ip
# -v 옵션을 사용하면 디버그 모드로 접속과정의 로그를 확인할 수 있다. 

-p 옵션을 사용하면 포트번호를 지정할 수 있다.

$ ssh -p [포트] user@server_ip
# 예
$ ssh -p 2220 bandit0@bandit.labs.overthewire.org

만약 개인키(id_rsa)의 위치를 변경한다면, -i 옵션으로 접속하면 된다.

$ ssh -i [변경된 경로] user@sever_ip

Github에서 SSH 사용하기

Github에 ssh로 연결해두면 비밀번호 없이 연동할 수 있다. 물론 ssh키에 비밀번호(passphrase)를 설정한 경우에는 입력해야 한다. 미리 만들어둔 공개 키를 github 계정에 추가해주면 된다.

profile
하늘이의 개발 일기

1개의 댓글

comment-user-thumbnail
2022년 7월 10일

잘 보고 갑니다

답글 달기