Sunday, April 15, 2018

CentOS 7.3 리눅스 네트워크 ] 2. OpenSSH 서버 간단 설정


안녕하세요. 썬구루입니다. 이 게시물에서는 OpenSSH 서버에 대해 알아보도록 하겠습니다. 저희가 VMware Workstation에 가상머신을 생성 후 CentOS 7.3을 설치하여 사용하고 있습니다.

Console View를 통해 CentOS 7.3  리눅스의 입출력을 모니터처럼 보고 있는 것입니다. 실무에서는 키보드, 마우스, 모니터 역할을 하는 KVM 스위치라는 것을 사용하여 8대 또는 16대 서버에 연결하여 하나의 KVM 스위치를 통해 여러 대 서버에 접속하여 관리합니다.

현장에 가면 보통 서버 랙 하나 당 KVM 스위치가 하나씩 장착되어 있죠. 이것을 사용하는 이유는 수많은 서버에 1 대 1로 모니터, 키보드, 마우스를 배치할 수 없기 때문입니다.

또는 LCD 모니터, 키보드, 마우스를 이동식 선반에 장착한 한 물건... 정확한 명칭은 Computer Crash Cart라고 하는데.. 우리나라 명칭은 모르겠음.. 이동식 콘솔(?) 아무튼 이것을 관리하려는 서버 뒤로 끌어 놓고 키보드, 마우스, 모니터 선을 연결한 후 서버에 접속 관리합니다.

이러한 접속을 로컬 접속(Local Access) 또는 콘솔 접속(Console Access)이라 합니다.

만약 원격지에서 서버에 접속하려면 어떻게 하면 될까요? 불가 몇 년 전만 하더라도 텔넷 서비스(Telnet)를 사용하여 서버에 원격접속을 했었습니다. 서버에는 텔넷 서비스 프로그램이 동작하고(실제는 inetd나 xinetd가 바인딩 처리) 원격지에 있는 PC나 노트북에서 텔넷 클라이언트 프로그램을 사용하여 서버에 접속하는 것입니다.

이러한 접속을 원격 접속(Remote Access)라고 합니다.

요즘은 텔넷 서비스를 사용하지 않습니다. 텍스트(Text) 통신을 하기 때문에 중간에 패킷만 가로챌 수 있다면 접속 ID와 암호를 낚아챌 수 있기 때문입니다. 그리고 전산운영에 대한 보안 점검 시 telnet 서비스는 감사 대상입니다.

그래서 리눅스 또는 유닉스에서 암호화된 통신을 하는 원격 접속을 하기 위해 SSH 서비스를 사용합니다. 이 게시물에서는 이것에 대해 알아보려 합니다.



■ OpenSSH 서버 버전 확인

아래와 같은 명령을 실행하면 CentOS 7.3에서 사용하는 SSH 서버 버전을 확인할 수 있다.

[root@centos701 Packages]# rpm -qa | grep openssh-server

openssh-server-6.6.1p1-31.el7.x86_64

[root@centos701 Packages]#
[root@centos701 Packages]# rpm -qi openssh-server-6.6.1p1-31.el7.x86_64

Name        : openssh-server
Version     : 6.6.1p1
Release     : 31.el7
Architecture: x86_64
Install Date:
Group       : System Environment/Daemons
Size        : 943606
License     : BSD
Signature   : RSA/SHA256, 2016년 11월 21일 (월) 오전 04시 48분 43초, Key ID 24c6a8a7f4a80eb5
Source RPM  : openssh-6.6.1p1-31.el7.src.rpm
Build Date  :
Build Host  : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.openssh.com/portable.html
Summary     : An open source SSH server daemon
Description :
OpenSSH is a free version of SSH (Secure SHell), a program for logging
into and executing commands on a remote machine. This package contains
the secure shell daemon (sshd). The sshd daemon allows SSH clients to
securely connect to your SSH server.

[root@centos701 Packages]#
[root@centos701 Packages]# which sshd

/usr/sbin/sshd

[root@centos701 Packages]# 

■ OpenSSH 서버 서비스 및 프로세스 확인

[root@centos701 Packages]# systemctl status sshd.service

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 목 2017-01-26 13:21:25 KST; 5 days ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1120 (sshd)
   CGroup: /system.slice/sshd.service
           └─1120 /usr/sbin/sshd

 1월 26 13:21:25 centos701 systemd[1]: Starting OpenSSH server daemon...
 1월 26 13:21:25 centos701 systemd[1]: PID file /var/run/sshd.pid not readable (yet?) after start.
 1월 26 13:21:25 centos701 sshd[1120]: Server listening on 0.0.0.0 port 22.
 1월 26 13:21:25 centos701 sshd[1120]: Server listening on :: port 22.
 1월 26 13:21:25 centos701 systemd[1]: Started OpenSSH server daemon.
 1월 31 13:02:40 centos701 sshd[5307]: Connection closed by 192.168.80.1 [preauth]
 1월 31 13:25:07 centos701 sshd[5511]: Accepted password for guru from 192.168.80.1 port 49710 ssh2

[root@centos701 Packages]#
[root@centos701 Packages]# ps -ef | grep sshd

root      1120     1  0  1월26 ?      00:00:00 /usr/sbin/sshd
root      5511  1120  0 13:25 ?        00:00:00 sshd: guru [priv]
guru      5515  5511  0 13:25 ?        00:00:00 sshd: guru@pts/1
root      5804  3407  0 13:40 pts/0    00:00:00 grep --color=auto sshd

[root@centos701 Packages]# 

■ OpenSSH 서버 서비스 시작/종료

아래와 같은 명령을 사용하여 OpenSSH 서버 서비스 데몬(Daemon)인 sshd를 시작 또는 종료할 수 있다.

[root@centos701 Packages]# systemctl status sshd.service

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 목 2017-01-26 13:21:25 KST; 5 days ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1120 (sshd)
   CGroup: /system.slice/sshd.service
           └─1120 /usr/sbin/sshd

 1월 26 13:21:25 centos701 systemd[1]: Starting OpenSSH server daemon...
 1월 26 13:21:25 centos701 systemd[1]: PID file /var/run/sshd.pid not readable (yet?) after start.
 1월 26 13:21:25 centos701 sshd[1120]: Server listening on 0.0.0.0 port 22.
 1월 26 13:21:25 centos701 sshd[1120]: Server listening on :: port 22.
 1월 26 13:21:25 centos701 systemd[1]: Started OpenSSH server daemon.
 1월 31 13:02:40 centos701 sshd[5307]: Connection closed by 192.168.80.1 [preauth]
 1월 31 13:25:07 centos701 sshd[5511]: Accepted password for guru from 192.168.80.1 port 49710 ssh2

[root@centos701 Packages]#
[root@centos701 Packages]# systemctl stop sshd.service
[root@centos701 Packages]#
[root@centos701 Packages]# systemctl status sshd.service

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 화 2017-01-31 13:48:48 KST; 3s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1120 (code=exited, status=0/SUCCESS)

 1월 26 13:21:25 centos701 systemd[1]: Starting OpenSSH server daemon...
 1월 26 13:21:25 centos701 systemd[1]: PID file /var/run/sshd.pid not readable (yet?) after start.
 1월 26 13:21:25 centos701 sshd[1120]: Server listening on 0.0.0.0 port 22.
 1월 26 13:21:25 centos701 sshd[1120]: Server listening on :: port 22.
 1월 26 13:21:25 centos701 systemd[1]: Started OpenSSH server daemon.
 1월 31 13:02:40 centos701 sshd[5307]: Connection closed by 192.168.80.1 [preauth]
 1월 31 13:25:07 centos701 sshd[5511]: Accepted password for guru from 192.168.80.1 port 49710 ssh2
 1월 31 13:48:48 centos701 systemd[1]: Stopping OpenSSH server daemon...
 1월 31 13:48:48 centos701 systemd[1]: Stopped OpenSSH server daemon.

[root@centos701 Packages]#
[root@centos701 Packages]# systemctl start sshd.service
[root@centos701 Packages]#
[root@centos701 Packages]# systemctl status sshd.service

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 화 2017-01-31 13:49:03 KST; 2s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 5912 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 5913 (sshd)
   CGroup: /system.slice/sshd.service
           └─5913 /usr/sbin/sshd

 1월 31 13:49:03 centos701 systemd[1]: Starting OpenSSH server daemon...
 1월 31 13:49:03 centos701 systemd[1]: PID file /var/run/sshd.pid not readable (yet?) after start.
 1월 31 13:49:03 centos701 sshd[5913]: Server listening on 0.0.0.0 port 22.
 1월 31 13:49:03 centos701 sshd[5913]: Server listening on :: port 22.
 1월 31 13:49:03 centos701 systemd[1]: Started OpenSSH server daemon.

[root@centos701 Packages]# 




■ sshd 구성 파일

sshd 데몬의 주요 구성 파일은 /etc/ssh/sshd_config이다. 이 파일에서 주요 설정은 아래와 같다. 주석 기호는 # 이다.

root 계정으로 ssh 접속할 수 있도록 한다.

 PermitRootLogin yes

sshd 서비스 포트 번호를 설정한다.

 Port 22

sshd 서비스 IP 주소를 설정한다. 서버에 IP 주소가 여러 개일 경우 특정 IP로만 접속하도록 만들 수 있다.

 ListenAddress 192.168.80.250

■ 윈도우용 SSH Client 프로그램 Putty

리눅스 / 유닉스 운영체제에 SSH 클라이언트 프로그램이 설치되어 있으며 ssh 명령을 사용하여 외부 SSH 서버에 접속할 수 있다. 만약 윈도우 호스트 운영체제(예를 들어 Windows 7 또는 8)를 사용하고 있는데 리눅스 서버에 접속을 해야 한다면 SSH Client 프로그램을 사용해야 한다.

Free 소프트웨어로 많이 사용하는 SSH Client 프로그램이 Putty이다. 단일 파일 프로그램이며 이 파일은 아래 주소에서 다운로드할 수 있다.

https://the.earth.li/~sgtatham/putty/latest/x86/putty.exe

파일을 다운로드한 후 탐색기(Explorer)에서 파일을 더블 클릭하면 실행된다. Host Name or IP address에 IP 주소를 입력하고 Connection Type를 SSH로 선택한 후 Open 버튼을 선택하면 SSH 원격 접속을 시도한다.

그러면 보안에 관련된 창이 나타나는데 예(Y)를 선택하면 사용자 계정과 암호를 묻는다. 접속이 성공적으로 완료되면 터미널처럼 사용하면 된다.


관리자가 SSH를 사용하는 이유는 시스템 원격 관리를 하기 위해서이다. 원격지 시스템을 마치 로컬 시스템 관리하듯 사용할 수 있기 때문이다.

login as: guru

guru@192.168.80.10's password: ********
Last login: Mon Jan 16 01:16:37 2017

[guru@centos701 ~]$ ls

공개  다운로드  문서  바탕화면  비디오  사진  서식  음악

[guru@centos701 ~]$


■ ssh 명령

sshd는 SSH 서비스를 위해 사용되는 서비스 프로그램이다. /usr/bin/ssh 명령은 SSH 클라이언트 프로그램이다. 리눅스 또는 유닉스 운영체제에 대부분 설치되어 있다. 만약 CentOS 운영체제에서 다른 시스템으로 SSH 원격 접속을 해야 한다면 /usr/bin/ssh 명령을 사용할 수 있다.

1). 명령형식

ssh [옵션] SSH 서버_IP주소

2). 옵션

옵 션
내 용
 -l USERNAME
 SSH 접속을 위해 사용할 사용자 계정 이름을 입력할 때 사용한다.
 -p PORT
 원격지 포트 번호를 입력할 때 사용한다.

3). 예제

아래와 같이 ssh 명령 테스트를 하기 위해 localhost 즉 자기 자신에게 ssh 접속을 시도한다.

[root@centos701 ssh]# which ssh
/usr/bin/ssh
[root@centos701 ssh]#
[root@centos701 ssh]# rpm -qf /usr/bin/ssh

openssh-clients-6.6.1p1-31.el7.x86_64

[root@centos701 ssh]#
[root@centos701 ssh]# ssh -l guru localhost

The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is d9:d8:0c:37:71:62:78:88:2a:df:86:b2:35:88:94:15.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
guru@localhost's password:
Last login: Tue Jan 31 13:25:08 2017 from 192.168.80.1

[guru@centos701 ~]$
[guru@centos701 ~]$ id

uid=1000(guru) gid=1000(guru) groups=1000(guru) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[guru@centos701 ~]$
[guru@centos701 ~]$ pwd

/home/guru

[guru@centos701 ~]$ exit

logout
Connection to localhost closed.

[root@centos701 ssh]#

여기까지 OpenSSH 서버 간단 설정에 대해 알아보았습니다.

리눅스/유닉스에서 SSH 서비스는 기본적으로 root 계정에 대한 접속을 막도록 설정되어 있습니다. 이는 root 계정에 대한 슈퍼 권한 때문에 그렇습니다. 테스트를 위해 root 계정 접속을 허용하도록 설정하는 것은 상관없지만 실무에서 서비스하는 서버에 대해서는 반드시 root 계정 접속은 막아 두어야 합니다.






No comments:

Post a Comment