개인/리눅스

[리눅스] SSH 설정 및 사용방법 (원격접속)

OmeGa2 2020. 2. 17. 17:17

SSH (Secure Shell) 를 쓰는 이유

SSH는 원격으로 다른 시스템에 로그인할 수 있는 대표적인 프로그램으로,

특히 다중접속을 허용하는 리눅스에서는 하나의 서버에서 여러 클라이언트에 접속해

관리해야 하는 경우가 많다. 이럴때 SSH와 같은 원격프로그램은 유용하게 쓰인다. 

 

기본적으로 리눅스에서 다른 시스템으로 원격 로그인할 수 있는 방법에는 대표적으로

SSH와 telnet을 떠올릴 수 있으며 두 가지는 사용법이 유사하다.

 

telnet은 원격으로 연결된 서버와 클라이언트 간의 데이터를 전송할 때 일반 텍스트 형식으로 전달하여 패킷을 도중에 누군가 도청할 경우 내용을 유출당할 수 있다.

 

SSH란

SSH는 패킷 전송시 암호화해서 전송하므로 안전하게 전송할 수 있고, 혹여나 도청당하더라도 암호화 된 파일을 도청해봤자 그 내용을 알기는 힘들다.

 

리눅스의 여러 배포판에서는 openssh (데몬명 : sshd)라는 패키지를 이용해서 사용한다.

openssh의 설정파일 = /etc/ssh/sshd_config 

sshd 데몬 실행 스크립트 = /etc/rc.d/init.d/sshd

 

기본적으로 ssh는 명령어를 통해 서버와 클라이언트가 별도의 보안채널을 형성한 뒤 사용한다.

이후에는 따로 로그인을 하지 않고도 파일을 가져오는 sftp프로그램과 파일을 복사하는 scp 기능

원격으로 shell을 사용하는 rsh기능 등을 사용할 수 있다.

 

 

SSH 특징

1. 암호화된 패킷을 전송

SSH에서는 기본적으로 패킷을 포함한 전송하는 모든 트래픽을 암호화해서 전송한다.

이는 도청이나 세션 하이재킹, 패킷 스니핑 등 보안공격을 방지헤는데 효과적이라서

보안성이 뛰어나다는 평을 받는다.

 

2. 클라이언트와 서버라는 관계가 존재한다.

SSH를 사용할 때 두 패키지 (ssh_server, ssh_client) 사이에 TCP라는 보안채널을 별도로 생성한다.

이 보안채널을 통해 서로를 인증한 뒤, 서버가 클라이언트를 인증할 수 있도록 여러 프로그램을 호출한다.

보안채널이 형성되고 나면 클라이언트 에서는 여러개의 세션을 사용할 수 있다.

 

3. sftp를 지원한다.

연결된 두 시스템 간의 안전한 파일전송을 위해서 sftp 기능을 지원한다.

서버에 접속할 계정과 해당 파일의 위치만 알고있다면 

sftp를 이용해서 서버에 있는 파일을 가져와 사용할 수 있다.

 

]# sftp://[계정명]@[ip주소][파일경로]

서버에 해당 계정을 이용해 파일을 클라이언트 측으로 가져올 수 있다.

 

4. 패스워드 없이 로그인이 가능하다.

초기에 서버와 클라이언트는 계정명과 ip주소를 입력한 뒤 passwd를 요구한다.

이후에 원격접속을 시도할 때는 별도의 passwd 없이 바로 로그인할 수도 있다.

 

5. scp (원격복사 기능)

서버와 클라이언트 사이에 로그인하지 않고도 scp를 이용해 원격으로 파일을

복사할 수 있는 기능이다.

 

]# scp [복사될 파일명] [원격지 ip주소]:[파일]

위 형식으로 원격지에 있는 파일을 클라이언트 측에 원하는 위치에 복사할 수 있다.

 

SSH 설치

리눅스에서는 ssh의 공개버전인 openssh를 사용한다.

ssh서버와 클라이언트 프로그램으로 나누어져 있다.

레드햇 계열의 리눅스에서는 3개의 패키지로 구분해서 배포하고 있다.

ssh 패키지 확인

openssh : openssh의 서버와 클라이언트에 모두 필요한 핵심파일이 들어있는 패키지이다.

openssh-server : 서버관련 패키지로 데몬인 sshd, sftp 서버 등이 있다.

openssh-clients : 클라이언트 관련 패키지로 ssh, scp, sftp 등이 들어있다.

 

 

ssh 서버에서 사용하는 기본설정

ssh가 설치되어있는 서버에서 설정과 관련된 파일은 /etc/ssh/sshd_config 가 있다.

 

vim sshd_config

ssh와 관련된 여러 설정항목은 sshd_config에서 확인할 수 있다.

설치되어있는 ssh의 기본적인 설명 포트번호와 함께 명령어의 PATH 경로가 나타나 있고,

RSA, DSA 등 암호화방식에 관한 설명과 log의 기록 방법 등을 설정할 수 있다.

 

서버의 환경설정 파일 sshd_config 파일의 주요항목은 아래와 같다.

 

Port 22

 = ssh 서버에서 사용하는 포트 지정

 

AddressFamily any

 = 접속하는 IP주소의 버전을 지정한다. any는 IPv4와 IPv6 모두 접속이 가능하다.

 

ListenAddress 0.0.0.0

ListenAddress ::

 = sshd 데몬이 허가하는 주소를 설정하는 영역이다.

 여러 네트워크대역이 있을 때 IP대역과 포트를 지정할 수 있다.

 0.0.0.0은 IPv4 버전을 지정하고, IPv6은 콜론(::)을 사용한다.

 

Protocol 2

 = ssh 프로토콜의 버전을 지정한다.

 

HostKey /etc/ssh/ssh_host_key

 = ssh1의 호스트 키 위치를 지정한다.

 

HostKey /etc/ssh/ssh_host_rsa_key

 = ssh2의 RSA 암호화방식에서 사용하는 호스트 키 위치를 지정한다.

 

HostKey /etc/ssh/ssh_host_dsa_key

 = ssh2에서 DSA 암호화방식에 사용하는 호스트 키 위치를 지정한다.

 

KeyRegenerationlnterval 1h

 = 서버는 암호화키를 이용해 접속하고 나면 해당 키는 자동으로 다시 만들어진다.

 이는 암호화키를 복제해서 악용하지 못하도록 하기 위함인데, 이 옵션은 키의 재생성 여부를

 설정할 수 있다. (0 = 재생성 X / 1h = 1시간 / 1m = 1분)

 

ServerKeyBits 1024

 = 서버 키의 비트수 지정

 

SyslogFacility AUTHPRIV

 = syslog와 관련된 facility를 지정하는 항목이다.

 ssh를 통한 접속은 authpriv 형식으로 log를 기록한다.

(facility : 로그를 발생시키는 프로그램의 유형) 

(authpriv : 인증을 필요로하는 프로그램이 발생시키는 메시지)

 

LogLevel INFO

 = 로그레벨을 지정하는 항목이다. 기본값은 INFO이며,

 그 외에 QUIET (기록X), FATAL (위험한 오류), ERROR, DEBUGS 등이 있다.

 (INFO 로그는 통계나 기본적인 정보메시지를 뜻한다.)

 

LoginGraceTime 2m

 = 로그인에 실패한 유저가 발생한 경우, 서버가 연결을 중단하는 시간이다.

 (0이면 제한이 없고, 2m은 2분을 말한다.)

 

PermitRootLogin yes

 = ssh를 통한 원격 로그인 사용자가 root로 로그인할 때 허용여부를 결정한다.

 

StrictModes yes

 = 로그인을 허용하기 전, 파일모드나 사용자의 홈디렉터리, 원격호스트파일을

 SSH 데몬이 체크할 수 있도록 해주는 설정이다.

 

MaxAuthTries 6

 = 접속 실패시 재시도할 수 있는 횟수를 지정한다.

 

MaxSessions 10

 = 네트워크 주소(접속ip주소)당 최대 연결할 수 있는 세션 수를 지정한다. 

 현재 10으로 설정되어, 하나의 ip로 원격 접속한 창을 최대 10개까지 사용할 수 있다.

 

RSAAuthentication yes

 = RSA 인증의 사용여부

 

PubkeyAuthentication yes

 = 공개키를 통한 인증의 사용여부

 

AuthorizedKeysFile    .ssh/authorized_keys

 = 클라이언트에서 생성한 공개 키를 저장할 파일명 지정

 

PasswordAuthentication yes

 = 패스워드를 이용한 인증을 허용한다.

 

KerberosAuthentication no

KerberosOrLocalPasswd yes

KerberosTicketCleanup yes

KerberosGetAFSToken no

KerberosUseKuserok yes

 = Kerberos 인증 관련 설정

 

GSSAPIAuthentication yes

GSSAPICleanupCredentials yes

 = GSSAPI 인증 관련 설정

 

UsePAM yes

 = PAM을 통해 제어할 것인지 설정

 

Compression yes

 = 압축의 허용여부 설정

 

UseDNS yes

 = 클라이언트의 호스트주소를 ip로 해석할 것인지 설정

 

PidFile /var/run/sshd.pid

 = ssh 데몬의 PID를 기록하는 파일

 

Banner none

 = 배너 관련 설정으로 로그인 전에 보여주는 메시지파일을 지정한다.

 

Subsystem    sftp    /usr/libexec/openssh/sftp-server

 = 보안 ftp 프로그램으로 sftp 서버를 사용하기 위한 설정이다.

 

 

이외에도 X11관련 설정이나 프로세스의 관리방식 등 설정할 수 있는 방법은 다양하다.

원하지 않는 설정은 '#' 문자를 통해 주석처리하는 방식으로 이용하면 된다.

 

ssh 명령어 사용법

리눅스에서는 openssh-clients 패키지를 설치하면 ssh를 이용해 다른 시스템에

원격으로 접속할 수 있다.

 

▷ 형식

]# ssh [호스트명 or ip주소]

 = ssh를 사용할 때 현재 사용중인 계정으로 다른 시스템에 접속을 시도하게 된다.

 서버와 클라이언트의 계정이 같을 경우에는 생략해도 되는 명령이다.

 

]# ssh [계정명]@[호스트이름]

 = 클라이언트와 서버의 계정이 다를 때 계정이름을 명기하는 방법이다.

 

]# ssh 호스트네임 명령

 = 원격으로 서버의 프로그램만 사용할 때, 접속하진 않고 명령만 내릴때 사용한다.

 

▷ 사용 예시

]# ssh user@192.168.1.10

 = user라는 계정으로 192.168.1.10 서버에 접속을 시도한다.

 

]# ssh -l other 192.168.1.10

 = 현재와는 다른 계정인 other로 192.168.1.10 서버에 접속을 시도한다.

 

]# ssh -p 180 192.168.1.10

 = 기본포트는 22번 이지만 180번 포트로 192.168.1.10 서버에 접속을 시도한다.

 

]# ssh -l other hostname mkdir test

 = other 계정으로 hostname 이라는 곳에 접속해서 mkdir test 명령을 내린다.

 

]# sftp://other@192.168.2.20/tmp/test

 = other계정으로 192.168.2.20 서버에 접속해서 /tmp/test 파일을 가져온다.

 

]# scp /tmp/test 192.168.2.20:/tmp/aaa

 = 192.168.2.20 서버에 있는 aaa 파일을 클라이언트 측에 /tmp/test 이름으로 복사한다.