리눅스/OS 설정

[LINUX] SSH를 사용하는 명령어 SFTP (SFTP 비활성화)

ㅎㄷㄹㅁㅇ 2024. 4. 1. 17:06
반응형

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 접속하기

     

    [Linux] ssh-keygen 생성으로 ssh 접속하기

    ssh-keygen 목차 ssh-keygen 이란? SSH를 통한 서버 접속 시 다양한 인증 방법으로 접속이 가능한데, 제일 편리하고 간단하게 사용하는 방법은 패스워드를 통한 접속을 하는 것입니다. 하지만 보안에 취

    handari.tistory.com

     

    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 프로토콜을 사용해서 접속
    반응형
    TOP