SSH(Secure Shell)란
목차
네트워크를 사용하여 원격지에 있는 호스트에 명령을 전송, 연결하는 방법입니다. 다시 말해, SSH는 암호화를 사용하여 원격 호스트 간의 연결을 인증하고 암호화합니다. 가장 기본적이고 대표적인 보안 수단입니다. 기존에 사용하던 Telnet과는 암호화가 추가 된 다른 연결 방식으로 보면 됩니다. SSH의 포트 번호는 22 입니다.
SSH 동작 원리
SSH의 동작 원리는 SSH Server에서 원격지의 SSH Client로부터 접속을 기다리고 있다가, SSH 클라이언트가 접속을 시도하면 정해진 순서로 연결합니다. SSH의 동작의 핵심은 Key 입니다. #대칭키 , #비대칭키 가 있습니다. 서버와 클라이언 모두 각각의 키를 보유하고 있고 키를 사용하여 서로를 인증합니다. (비대칭키를 사용하여 서버와 클라이언트를 인증합니다. 대칭키를 사용하여 데이터의 암호화를 진행합니다.) 인증 이후에는 암호화된 상태의 데이터들을 주고 받는 것이 가능합니다.
- 비대칭 키(호스트 키) :
서버와 클라이언트의 인증을 위한 키입니다. Public key와 Private key를 사용합니다. 공개키(Public key) 암호화는 서로 다른 두개의 키를 통해 암호화를 진행 하는 것을 말합니다. - 대칭 키(세션 키) :
서버와 클라이언트가 인증을 거칠 때 대칭 키를 생성합니다. 이 과정은 키 교환 과정으로 서로 데이터를 주고 받는 과정에서 세션 키를 사용하여 암호화 및 복호화를 진행합니다.
SSH Keygen
SSH를 통한 서버 접속 시 다양한 인증 방법으로 접속이 가능한데, 제일 편리하고 간단하게 사용하는 방법은 패스워드를 통한 접속을 하는 것입니다. 하지만 보안에 취약하고 주기적 변경해야 하는 단점이 있습니다.
이를 위해 SSH 접속을 보다 간편하게 하는 방법이 있습니다. ssh-keygen 생성입니다. 이는 이전에 작성한 글을 통해서 확인이 가능합니다.
[Linux] ssh-keygen 생성으로 ssh 접속하기
SFTP(SSH File Transfer Protocal)와 SCP(Secure Copy Protocal)
- SFTP :
SSH를 이용한 FTP입니다. SSH 주요 기능에 포함된 기능으로 FTP에 보안이 추가되어 보안 파일을 전송합니다. 데이터 전송의 안정성이 추가 되었다고 볼 수 있습니다. - SCP :
원격지에 파일 또는 디렉토리를 보낼 때 사용하는 파일 전송 프로토콜입니다. SFTP와 달리 간단한 파일만 전송하는 역할을 합니다. 속도는 SFTP보다 빠르지만 4GB 이상의 파일을 전송하는데 제약이 있습니다.
SFTP 비활성화 방법
SFTP 사용하기
SFTP를 사용하는 방법은 복잡하지 않습니다. SERVER 와 CLINET를 가지고 테스트 해봤습니다.
- 접속 테스트
$ sftp user@localhost
Password:
sftp > bye
1. 원격 서버에서 파일 가져오기
# SERVER
[root@SERVER ~]# ls -1
anaconda-ks.cfg
IAM_SERVER
initial-setup-ks.cfg
#CLINET
[root@CLIENT ~]# ls -1
anaconda-ks.cfg
IAM_CLIENT
original-ks.cfg
- CLIENT -> SERVER 접속
[root@CLIENT ~]# sftp 192.168.59.111
The authenticity of host '192.168.59.111 (192.168.59.111)' can't be established.
ECDSA key fingerprint is SHA256:fLQBjUsi9kQ1fsMqez3VX1mPITBXavfz+NJ6cnHS70c.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.59.111' (ECDSA) to the list of known hosts.
root@192.168.59.111's password:
Connected to 192.168.59.111.
- SERVER(원격)의 home 디렉토리 내 파일 디렉토리 list 확인
sftp> ls
IAM_SERVER anaconda-ks.cfg initial-setup-ks.cfg
- CLIENT(자신)의 /tmp 디렉토리 내 파일 디렉토리 list 확인
sftp> lcd /tmp
sftp> lls /tmp
ks-script-zjm17uir
- CLIENT(자신)의 home 디렉토리 내 파일 디렉토리 list 확인
sftp> lcd ~
sftp> lls
anaconda-ks.cfg IAM_CLIENT original-ks.cfg
- CLIENT(자신)의 /tmp 디렉토리 이동
sftp> lcd /tmp
sftp> lls
ks-script-zjm17uir
- CLIENT(자신)의 /tmp 디렉토리 내로 IAM_SERVER 파일 복사
sftp> get IAM_SERVER
Fetching /root/IAM_SERVER to IAM_SERVER
sftp> lls
ks-script-zjm17uir
IAM_SERVER
sftp> exit
[root@CLIENT ~]# ls -1
anaconda-ks.cfg
IAM_CLIENT
original-ks.cfg
[root@CLIENT ~]# ls -1 /tmp
ks-script-zjm17uir
IAM_SERVER
2. 원격 서버로 파일 보내기
# SERVER
[root@SERVER ~]# ls -1
anaconda-ks.cfg
IAM_SERVER
initial-setup-ks.cfg
#CLINET
[root@CLIENT ~]# ls -1
anaconda-ks.cfg
IAM_CLIENT
original-ks.cfg
- CLIENT -> SERVER 접속
[root@CLIENT ~]# sftp 192.168.59.111
root@192.168.59.111s password:
Connected to 192.168.59.111.
- SERVER(원격)의 home 디렉토리 내 파일 디렉토리 list 확인
sftp> ls
IAM_SERVER anaconda-ks.cfg initial-setup-ks.cfg
- CLIENT(자신)의 home 디렉토리 내 파일 디렉토리 list 확인
sftp> lls
anaconda-ks.cfg IAM_CLIENT original-ks.cfg
- SERVER(원격)의 /tmp 디렉토리 이동
sftp> cd /tmp
sftp> ls
- SERVER(원격)의 /tmp 디렉토리 내로 IAM_CLIENT 파일 복사
sftp> put IAM_CLIENT
Uploading IAM_CLIENT to /tmp/IAM_CLIENT
IAM_CLIENT 100% 0 0.0KB/s 00:00
sftp> ls
IAM_CLIENT
- SERVER(원격)의 home 디렉토리 이동
sftp> cd /root
- IAM_SERVER 파일만 존재하는 것을 확인
sftp> ls
IAM_SERVER anaconda-ks.cfg initial-setup-ks.cfg
SFTP 비활성화
SFTP를 비활성화 하는 방법은 데몬을 종료한다고 되는 것이 아닙니다. 실제로 SSH 데몬을 통해서 SFTP가 동작하기 때문에, systemctl 명령어를 통해서 sftp만 중지 할 수는 없습니다. vsftpd 데몬은 ftp의 데몬으로 systemctl 명령어를 통해 시작/중지가 가능하지만, SFTP는 방법이 다릅니다.
- sshd_config 파일 확인
# cat /etc/ssh/sshd_config | egrep -v '^$|^#'
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
#Subsystem sftp /usr/libexec/openssh/sftp-server # 해당 라인 주석
- 데몬 재시작
# systemctl status sshd
# systemctl restart sshd
# systemctl status sshd
Subsystem sftp /usr/libexec/openssh/sftp-server 부분을 주석 처리 한 뒤 systemctl restart 명령어를 통해서 sshd 설정 변경을 적용합니다.
- CLIENT -> SERVER 접속
[root@CLIENT ~]# sftp 192.168.59.111
root@192.168.59.111s password:
Connected to 192.168.59.111.
sftp> exit
exit
/etc/ssh/sshd_config 파일의 Subsystem 부분 주석처리 후
- CLIENT -> SERVER 접속
[root@CLIENT ~]# sftp 192.168.59.111
root@192.168.59.111s password:
subsystem request failed on channel 0
Connection closed.
Connection closed
SCP를 비활성화 하는 방법은 존재하지 않습니다. /usr/bin/scp 의 파일의 삭제를 통해서는 가능하지만, 그렇게 될 경우 해당 서버에서 scp를 통해 파일을 전송하는 것이나 파일을 받는 것 모두 사용이 어렵습니다.
SFTP를 비활성화 설정 후에도 윈도우의 winscp를 통해서 sftp가 접속 되는 경우
SCP 사용은 윈도우가 OS 장비에서 사용하는 것이 어렵습니다. 이를 쉽게 사용 할 수 있게 해주는 프로그램으로 winscp가 있는데, 이를 통하면 원격 서버가 리눅스 서버라도 쉽게 파일을 주고 받는 것이 가능합니다. 또한 SCP 뿐만 아니라, SFTP를 사용하여 파일을 받아 올 수 있습니다.
하지만 원격 서버에서 SFTP 설정을 비활성화 했음에도, 프로그램을 통해 SFTP 접속을 하는 경우가 있는데 이는 실제 SFTP 프로토콜을 사용하는 것이 아니라, winscp 가 SFTP 사용을 하지 않고 자동으로 SCP 프로토콜을 사용해서 그렇습니다. 따라서 실제로 SFTP의 동작은 하지 않습니다.
- SFTP 비활성화
- SERVER -> SERVER 자신에게 SFTP 접속
[root@SERVER ~]# sftp localhost
root@localhosts password:
subsystem request failed on channel 0
Connection closed.
Connection closed
- SCP 프로토콜을 사용해서 접속
'리눅스 > OS 설정' 카테고리의 다른 글
[LINUX]EDAC 비활성화 (0) | 2024.03.22 |
---|---|
[LINUX]kickstart를 포함한 iso이미지 만들기 (0) | 2023.11.24 |
[LINUX]localrepo 및 원격 repo 구성 (0) | 2023.11.22 |
[LINUX]Telnet session 값 변경 (MaxConnections) (0) | 2023.11.20 |
[LINUX] SWAP OFF (0) | 2023.04.28 |