강좌
클라우드/리눅스에 관한 강좌입니다.
해킹&보안 분류

리눅스마스터1급 : 시스템 보안 관련 유틸리티 및 명령어 : ssh

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 시스템 보안 관련 유틸리티 및 명령어 : ssh




SSH(Secure Shell)

 

 

SSH(Secure Shell)는 네트워크로 연결된 다른 컴퓨터 접속 및 로그인을 할 수 있으며 원격 시스템에서 명령을 실행 하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 프로그램이다.

 

 

 

SSH는 강력한 인증 방법으로 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있도록 해준다.

 

 

 

 

 

SSH는 두 호스트간의 공개키 기반의 암호화 기법으로 통신을 암호화하여 통신하다.

 

 

 

telent, rlogin, rcp 등과 비교하면 스니핑이 발생했을 경우 앞의 프로그램의 경우 암호화가 되지 않다 보니 텍스트가 그대로 노출 되는 반면 SSH의 경우 암호화가 되어있어 노출이 되더라도 키가 없이는 해당 내용을 확인하기 힘들다.

 

 

 

 

 

IP 스푸핑이나 DNS스푸핑에 의해 통신상의 왜곡이 발생하더라도 암호화된 패킷에 의해 전문에 대한 보호가 가능하다.

 

 

 

일반적인 rlogin, telnet과 달리 전송시 패킷이 암호화 됨으로 원격 관리의 보안이 매우 안정적이다.

 

 

 

SSHRSA 공개키/개인키 방식을 이용하여 암호화 하며 그 외 Secure ID, s/key, Kerberos 그리고 TLS 역시 지원한다.

 

 

 

X11서버와도 forwording을 통한 연결을 지원한다.

 

 

 

즉 원격에서 ssh를 통하여 X서버의 프로그램이 실행 가능하다.

 

 

 

파일전송도 sshsubsystemsftp를 이용하여 지원한다.

 

 

 

현재 SSH1SSH2가 나와 있는데 SSH1의 경우는 공개 프로그램이지만 SSH2는 비상업적인 경우에만 자유롭게 이용가능한 라이선스 제한이 있다.

 

 

 

 

 

OpenSSH 클라이언트

기본적인 사용법

OpenSSH 클라이언트는 ssh1, ssh2 프로토콜을 모두 지원하므로 서버가 지원하는 ssh 프로토콜에 상관없이 접속 할 수 있다.

 

 

 

예를 들어 gate.sulinux.net이고 계정이 sulinux라면

 

 

 

 

 

 

[sulinux@sulinux]$ ssh l sulinux gate.sulinux.net

 

 

 

 

 

또는

 

 

 

 

 

[sulinux@sulinux]$ ssh sulinux@gate.sulinux.net

 

 

 

 

 

 

위와 같이 명령어를 실행하면 아래와 같이 메세지를 출력하며 접속이 진행될 것이다.

 

 

 

 

 

 

 

 

 

The authenticity of host '[gate.sulinux.net] ([192.168.100.2])' can't be established.

RSA key fingerprint is 7f:0a:27:7c:ec:21:b9:ba:12:2f:e0:e3:03:34:c7:92.

Are you sure you want to continue connecting (yes/no)?

 

 

 

 

 

 

위의 메세지는 ssh로 해당서버에 최초 접속시 나오는 메세지이며 yes라고 대답해주면 접속할 서버의 호스트키가 ~/.ssh/known_hosts(ssh2의 경우 known_hosts2) 파일에 저장된다.

 

 

 

 

 

 

 

 

Warning: Permanently added '[gate.sulinux.net],[192.168.100.2]' (RSA) to the list of known hosts.

sulinux@gate.sulinux.net's password:

 

 

 

 

 

 

인증을 거치고 나면 텔넷이나 리눅스 쉘에서 하는 작업들이 가능해진다.

 

 

 

 

 

인증키 사용하기

 

 

인증키를 사용하는 것은 로그인 할 때마다 암호를 직접 입력하는 것보다 더욱 안전하며, 하나의 인증서 암호로 여러 ssh서버에 접속할 수 있는 등의 장점을 가진다.

 

 

 

 

 

인증키 만들기

 

 

인증키는 ssh-keygen으로 만든다.

 

 

 

 

 

 

 

 

 

[sulinux@sulinux ~]$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/sulinux/.ssh/id_rsa):

Created directory '/home/sulinux/.ssh'.

 

 

 

 

 

 

키가 저장될 위치와 이름을 물어본다.

 

 

 

기본 위치에 저장을 하려면 그냥 엔터를 누르고 넘어가면 다음과 같이 인증키 암호를 물어본다.

 

 

 

사용할 암호를 입력하고 다시한번 확인을 위해 입력하면 키가 생성된다.

 

 

 

 

 

 

 

 

 

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/sulinux/.ssh/id_rsa.

Your public key has been saved in /home/sulinux/.ssh/id_rsa.pub.

The key fingerprint is:

39:ec:3c:3d:d8:6b:71:8f:62:86:29:73:7b:6c:10:c6 sulinux@SULinux

The key's randomart image is:

+--[ RSA 2048 ]----+

| |

| |

| . |

| .E. |

| .S. |

| o.=. . |

| ==+o o |

| o +.Oo. . |

| +.B.. |

+-----------------+

 

 

 

 

 

 

인증키 생성시 인증키 암호를 공백으로(passphrase 물어볼 경우 그냥 엔터를 누르면 된다.) 만들 수도 있다 하지만 이것은 인증키로 ssh 접속시 인증키 암호를 입력하지 않고 그냥 접속이 가능하나 만약의 경우 인증키가 유출이 된 경우 인증키를 탈취한 사용자는 그냥 접속이 가능함으로 보안사고를 예방하기 위해 피해야 한다.

 

 

 

 

 

그리고 ssh-addssh-agent를 사용하여 접속할 때 마다 인증키 암호를 입력하지 않는 방법이 있다.

 

 

 

 

 

퍼블릭 키(Public Key) 사용하기

~/.ssh/안에 한쌍의 키(id_rsa, id_rsa.pub)가 생성되어 있을 것이다.

 

 

 

이 인증키를 접속할 리모트 서버들의 ~/.ssh/authorized_keys라는 이름으로 복사해준다.

 

 

 

 

 

 

 

 

 

[sulinux2@sulinux]$ scp ~/.ssh/id_ras.pub sulinux@gate.sulinux.

net:.ssh/authorized_keys

 

 

 

 

 

 

이제 ssh 접속시 계정에 대한 암호를 물어보는 것이 아니라 인증키의 암호를 물어볼 것이다.

 

 

 

만약 계정의 암호를 물어본다면 authorized_keys의 소유권이나 퍼미션이 잘못되어 있을 것이므로 우선 접속 후 chmod 644 .ssh/authorized_keys로 접근이 가능한 퍼미션을 제공해준다.

 

 

 

 

 

일반적으로 아무런 옵션을 주지 않고 인증키를 만들었다면 rsa1방식의 ssh1 프로토콜의 사용을 의미한다.

 

 

 

만약 서버가 ssh2 프로토콜을 지원한다면 ssh_keygen t rsa(또는 dsa) 옵션을 주고 인증키를 생성한다.

 

 

 

 

 

OpenSSH는 두가지 프로토콜의 인증키를 동시에 쓰는 것이 가능하다.

 

 

 

만들어진 퍼블릭키를 위와 같은 방법으로 리모트 서버에 ~/.ssh/authorized_keys2로 복사하면 된다.

 

 

 

 

 

인증키를 메모리에 상주시키기

 

 

다음 방법으로 인증키를 메모리에 기억시켜 두면 처음 한 번만 인증키 암호를 입력하면 다음부터는 암호를 입력하지 않아도 같은 인증키를 사용하는 서버에 접속이 가능하다.

 

 

 

 

 

 

 

 

 

[sulinux2@sulinux]$ eval $(ssh-agent) [Enter]

Agent pid 31823

 

 

 

 

 

이제 ssh-add를 입력하면

 

 

 

 

 

 

[sulinux2@sulinux]$ ssh-add

Identity added: /home/sulinux/.ssh/id_rsa (/home/sulinux/.ssh/id_rsa)

 

 

 

 

 

 

이후부터 인증키를 복사해둔 ssh 서버에 접속하면 이세션에서는 더 이상 암호를 물어보지 않을 것이다.

 

 

 

 

 

서버가 지원한다면 되도록 ssh2프로토콜을 사용하도록 한다.

 

 

 

ssh2ssh1과 전혀 다른 프로토콜이며 더욱 안전하고 성능이 좋다.

 

 

 

 

 

ssh를 이용한 파일 복사

 

 

앞서 인증키를 원격의 서버에 복사할 때 사용하는 scp에 대해서 알아보자. 예를 들어 복사하려는 파일명이 ‘dumb’라고 하고 접속하려는 원격 서버의 주소는 www.foobar. com라 하고 쉘계정을 sulinux2라 한다면 dumb 라는 파일을 www.foobar.comsulinux2 계정 홈디렉토리에 복사하는 방법은 아래와 같다.

 

 

 

 

 

 

 

 

[sulinux@sulinux]$ scp dumb sulinux2@www.foobar.com:.

 

 

 

 

 

 

www.foobar.comsulinux2 계정 홈디렉토리에 있는 dumb 파일을 로컬로 복사하기는 다음과 같다.

 

 

 

 

 

 

 

 

 

[sulinux@sulinux]$ scp sulinux2@www.foobar.com:dumb .

 

 

 

 

 

 

~/.ssh/config 파일에 다음과 같이 www.foobar.com의 계정을 설정을 하였다면

 

 

 

 

 

 

 

Host *SUL

HostName www.foobar.com

User sulinux2

ForwardAgent yes

 

 

 

 

 

보다 편리하게 사용할 수 있다.

 

 

 

 

 

 

 

 

 

[sulinux@sulinux]$ scp dumb SUL:.

 

 

 

 

 

 

또한 scpr 옵션을 가지고 있는데 이는 디렉토리를 전체 복사할 경우에 사용한다.

 

 

 

 

예를 들어 test/ 디렉토리 안의 모든 파일과 하위 디렉토리 전체를 원격 서버 계정의 www 디렉토리 안에 복사하려면 다음과 같다.

 

 

 

 

 

 

 

 

 

[sulinux@sulinux]$ scp r test/ sulinux2@www.foobar.com:www/

 

 

 

 

 

 

sftpssh하에서 전통적인 ftp 환경을 제공하면서, 원격의 프로그램을 실행시킬 수 있다.

 

 

 

OpenSSH클라이언트 패키지에는 sftp를 포함하여 제공해준다.

 

 

 

 

 

ssh 터널링

ssh 터널링이란 ssh 접속을 다른 프로그램이 사용할 수 있도록 Port Forwarding해 주는 것을 말한다.

 

 

 

ssh 터널링을 이용하여 암호화접속을 사용하지 않는 네트워크 접속을 보다 안전하게 해 준다.

 

 

 

 

 

설정파일

ssh 설정 파일은 ~/.ssh/config 파일이다.

 

 

 

또는 전체 사용자의 기본 설정은 /etc/ssh/ssh_config로 설정할 수 있다.

 

 

 

다음은 ssh 설정 파일의 일부분이다.

 

 

 

Host 지시자를 사용하여 접속할 서버마다 다른 옵션을 사용할 수 있다.

 

 

 

 

 

 

 

 

 

# *.sulinux.net 도메인을 가진 서버에 접속할 때는 SSH2 프로토콜을 사용한다

Host *.sulinux.net

Protcool 2

....

# susoft.kr 도메인을 가진 서버에 접속할 때는 SSH2 프로토콜과 압축을 사용한다.

 

 

 

 

Host susoft.kr

Protocol 2

Compression yes

CompressionLevel 9

...

# linux.co.kr 도메인을 가진 서버에 접속할 때는 SSH1 프로토콜을 사용하며

# Cipherblowfish, 압축을 사용한다.

 

 

 

 

Host linux.co.kr

Protocol 1

Cipher blowfish

Compression yes

 

 

 

 

 

 

그외 중요한 옵션중에 CheckHostIP가 있는데 이것은 접속 할 때마다 원격서버의 IPknow_hosts 파일과 대조해본다.

 

 

 

이것은 DNS spoofing에 의해 호스트 키의 변경을 알수있는 옵션이다.

 

 

 

기본값은 yes이다.

 

 

 

 

 

OpenSSH 관련 사이트

 

 

https://www.linux.co.kr/home2/search/?keyword=ssh&select=lec

http://onsight.com/faq/ssh/ssh-faq.html

http://kldp.org/KoreanDoc/html/SSH-KLDP/index.html

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  78 명