본문 바로가기

Compute™/Linux

ssh keygen

반응형
SMALL

#
Find similar titles

Structured data

Category
Computer science

시큐어 쉘 (Secure Shell, SSH) #

SSH는 네트워크상의 다른 컴퓨터에 접속하여 명령을 실행하거나 파일을 복사할 수 있도록 해주는 프로그램이다. 기존의 rsh, rlogin, telnet 등을 대체하기 위해 만들어졌다. 기존의 텔넷에서와는 달리 주고받는 데이터는 기본적으로 암호화되어 전송되기 때문에 안전하게 통신을 할 수 있도록 해준다.

SSH 접속 #

기본적으로 SSH는 22번 포트를 사용한다. 서버에 SSH로 접속하기 위해서는 서버에 SSH 서비스가 실행 중이어야 하며 방화벽에서 22번 포트로의 접근이 허용되어 있어야 한다. Client에서는 SSH Client 프로그램을 이용하여 서버에 접속하게 된다.

SSH 접속 정보 저장 #

자주 접속하는 서버는 접속 정보를 저장해서 빠르게 재접속할 수 있다. IP를 입력하고, Saved Sessions에 이름을 입력 후 Save 버튼을 클릭하면 저장이 된다. 재접속 시 이름을 더블클릭하거나, 이름을 선택하고 Load를 클릭 후 Open을 클릭하면 저장한 서버로 접속하게 된다.

SSH 기본 포트 변경 #

SSH의 기본 포트는 22번을 사용하게 되는데 보안을 위해 다른 포트로 변경하여 운영해야 할 경우가 있다. 이러면 아래와 같이 설정함으로써 기본 포트를 변경할 수 있다.

vi /etc/ssh/sshd_config

Port 22  ## 이 부분을 찾아 원하는 포트로 변경

키 인증을 통한 접속 #

SSH 접속을 할 때 매번 비밀번호를 치는 것이 번거롭다면 키 인증 방식을 통해 비밀번호 없이 바로 SSH로그인을 할 수 있다.

동작 원리 #

SSH Key는 공개키(Public key)와 비공개키(Private key)로 이루어지는데 비공개키는 접속하는 Client에 공개키는 Server에 위치하게 된다. SSH 접속을 할 때 공개키와 비공개키를 비교하여 일치하는지를 확인하여 인증하는 방식이다.

여기서 중요한 것은 비공개키는 절대로 유출되면 안 되는 것이다. 비공개키는 Client인 내 PC에서만 보관하는 키로 이 키가 유출될 시 공개키가 등록된 서버에 이 키를 이용하여 아무나 접속할 수 있게 될 것이다.

SSH Key 생성 #

아래 명령어를 통해 키를 생성한다. -t rsa는 rsa 암호화 방식으로 키를 생성한다는 뜻이다.

[user@localhost ~]$ ssh-keygen -t rsa

위와 같이 명령어를 실행하면 키를 저장할 위치를 물어본다. 키 인증을 사용할 때 기본적으로 사용자의 홈 폴더의 .ssh 폴더의 키를 이용해서 인증을 시도한다. 특별한 이유가 없다면 엔터를 눌러 넘어간다.

[user@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):

다음으로 passphrase를 물어본다. 이 부분은 키에 대한 암호를 물어보는 것으로 비밀번호 없이 SSH접속을 하려는 경우라면 역시 엔터로 넘어간다. (한 번 더 물어본다.)

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

passphrase까지 넘어가면 아래와 비슷하게 나오며 키가 생성된다.

Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
3e:0a:33:aa:46:dd:de:69:f2:10:7e:68:66:79 user@localhost
The key`s randomart image is:
+--[ RSA 2048]----+
|       .         |
|           .     |
|   .             |
|  E o   K        |
|     o .S        |
|   ...o. .       |
|  + .o+=o        |
| +  .*==+        |
|  +o.+*o         |
+-----------------+

최종적으로 명령어 실행을 통해 2개의 파일이 생성된다. 비공개키 파일인 id_rsa 와 공개키 파일인 id_rsa.pub 가 생성이 된다. 이중 공개키는 말 그대로 공개하는 파일로 접속하고자 하는 서버에 올려서 인증하는 파일이다. 비공개키는 내 PC에 저장해서 공개키와 비교하는 파일로써 절대로 타인에게 노출되면 안 되는 파일이다. (known_hosts 파일은 SSH 접속을 했던 서버의 fingerprint가 기록되는 파일이다.)

[user@localhost ~]$ ls -al .ssh
total 24
drwx------.  2 user user 4096 May 23 23:39 .
drwx------. 44 user user 4096 May 14 11:14 ..
-rw-------.  1 user user 1675 May 23 23:39 id_rsa
-rw-r--r--.  1 user user  393 May 23 23:39 id_rsa.pub
-rw-r--r--.  1 user user 2400 Apr 18 16:47 known_hosts

SSH Key 적용방법 #

위에서 만든 키로 SSH 접속을 하기 위해서는 먼저 공개키인 id_rsa.pub 파일을 접속하고자 하는 서버에 올려야 한다. 접속하고자 하는 계정의 홈 폴더의 .ssh 폴더 안에 authorized_keys 파일에 공개키를 추가하면 키를 통해 비밀번호 없이 SSH 접속을 할 수 있다.

먼저 scp 명령 등으로 공개키 파일을 접속할 서버에 올린다. 아래와 같이 실행하면 서버의 홈 폴더에 파일이 업로드된다.

[user@localhost ~]$ scp .ssh/id_rsa.pub user@server:./

이후 서버에 SSH접속을 하여 인증키 파일 안에 공개키를 추가해준다. 아래와 같이 실행하면 기존에 만들어져 있던 인증키 파일에 내가 올린 공개키가 추가된다.

[user@localhost ~]$ cat id_rsa.pub >> .ssh/authorized_keys

만약 서버에 인증키 파일이 없다면 아래와 같이 에러가 날 것이다.

[user@localhost ~]$ cat id_rsa.pub >> .ssh/authorized_keys
.ssh/authorized_keys: No such file or directory

인증키 파일을 만들어주고 공개키 추가 명령어를 다시 실행한다.

[user@localhost ~]$ mkdir .ssh       # 만약 .ssh폴더가 없다면 만들어주자
[user@localhost ~]$ chmod 700 .ssh   # 인증키 등이 보관되는 폴더이므로 다른 사람이 보지 못하도록 권한을 설정해야 한다.
[user@localhost ~]$ touch .ssh/authorized_keys # 빈 인증키 파일 생성
[user@localhost ~]$ chmod 600 .ssh/authorized_keys # 역시 다른 사람이 읽지 못하도록 권한 설정
[user@localhost ~]$ cat id_rsa.pub >> .ssh/authorized_keys # 올린 공개키를 인증키 파일에 추가하기

위와 같이 설정한 후 SSH 접속 종료 후 다시 접속하면 비밀번호를 물어보지 않고 바로 서버에 접속된다.

SSH 터널링 #

SSH 터널링이란 SSH 프로토콜을 통해 내부의 PC 또는 서버의 공개되지 않은 포트를 외부에서 접속할 수 있도록 연결해주는 기술이다. 예를 들어 회사의 개인 PC에 집에서 원격 접속을 하고 싶다고 가정해보자. 일반적으로 개인 PC이면 사설 IP를 가지고 있고 외부에서 직접 접속을 할 방법은 없다. 또한 방화벽에 의해 연결되는 포트들은 막혀있을 것이다. 이럴 때 SSH 터널링을 이용하여 외부에서도 개인 PC에 접속할 수 있도록 하는 방법의 하나가 SSH 터널링이다.(안전한 SSH 프로토콜을 이용하여 강제적으로 방화벽을 우회하여 포트 포워딩을 해주는 방법이라고도 할 수 있다.)

원리는 간단하다. 먼저 SSH 터널링을 이용하기 위해서는 별도의 중계 서버가 필요하다. 먼저 이 중계 서버로 개인 PC에서 중계 서버로 SSH 접속을 통해 터널을 생성한다. 그다음 원격접속을 하고자 하는 PC, 집에서 중계 서버로 또 하나의 SSH 접속을 통해 터널을 생성한다. 그럼 두 개의 터널이 이어지면서 집에서 회사의 개인 PC로 원격 접속을 할 수가 있다. 또한, 터널 생성 시 포트를 지정할 수 있어 원격 접속뿐만 아니라 다른 포트의 서비스도 연결할 수가 있다.

SSH 터널링 사용방법 #

사용하고자 하는 중계 서버를 hostA.com 라 가정한다.

  1. 원격 접속을 하고자 하는 PC에서 중계 서버로 SSH 터널 생성

    방법 : ssh -R [중계 포트]:[호스트]:[원격접속포트] user@hostA.com
    예시 : ssh -R 20001:localhost:22 user@hostA.com
    
  2. 원격 접속을 할 PC에서 중계 서버로 SSH 터널 생성

    방법 : ssh -L [원격접속에 사용할 포트]:[호스트]:[중계 포트] user@hostA.com
    예시 : ssh -L 2222:localhost:20001 user@hostA.com
    
  3. 원격 접속을 할 PC에서 원격 접속 PC로 원격 접속

    방법 : ssh -p [원격접속에 사용할 포트] user@localhost
    예시 : ssh -p 2222 user@localhost
    

Incoming Links #

Related Data Sciences #

Suggested Pages #

반응형
LIST