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개의 패키지로 구분해서 배포하고 있다.
openssh : openssh의 서버와 클라이언트에 모두 필요한 핵심파일이 들어있는 패키지이다.
openssh-server : 서버관련 패키지로 데몬인 sshd, sftp 서버 등이 있다.
openssh-clients : 클라이언트 관련 패키지로 ssh, scp, sftp 등이 들어있다.
ssh 서버에서 사용하는 기본설정
ssh가 설치되어있는 서버에서 설정과 관련된 파일은 /etc/ssh/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 이름으로 복사한다.
'개인 > 리눅스' 카테고리의 다른 글
[리눅스] 웹 서비스의 구성 (웹 브라우저, HTTP) (0) | 2020.02.19 |
---|---|
[리눅스] 백업명령의 사용 (tar,cpio,rsync) (0) | 2020.02.18 |
[리눅스] 시스템 로그 설정과 관리(logrotate) (0) | 2020.02.16 |
[리눅스] 주변장치 관련 명령어 (프린터) (0) | 2020.02.15 |
[리눅스] 모듈의 관리와 설정파일 (0) | 2020.02.14 |