[python] Fabric으로 원격 서버 보안 강화하기

원격 서버에 대한 보안은 매우 중요합니다. 원격 서버에 액세스하는 방법 중 하나는 SSH를 사용하는 것인데, 이는 암호화된 연결을 통해 서버에 접근할 수 있게 해줍니다. 이번에는 Fabric을 사용하여 원격 서버에 대한 보안을 강화하는 방법에 대해 알아보겠습니다.

Fabric이란?

Fabric은 파이썬 기반의 라이브러리로, SSH를 통해 원격 서버에 명령을 실행하고 파일을 전송할 수 있게 해줍니다. Fabric은 명령어를 작성하고 실행하는데 매우 편리한 기능을 제공하며, 배치 작업을 자동화하는 용도로도 많이 사용됩니다.

Fabric을 사용한 보안 강화 방법

1. SSH 키 생성

SSH 키를 사용하면 비밀번호 없이 서버에 접속할 수 있습니다. 따라서 누군가가 알 수 없는 비밀번호를 통해 접속하는 것보다 더욱 안전합니다. Fabric에서 SSH 키를 사용하기 위해서는 먼저 SSH 키를 생성해야 합니다.

SSH 키를 생성하기 위해서는 다음의 명령어를 실행합니다.

ssh-keygen -t rsa -b 4096

이 명령어는 RSA 알고리즘을 사용하여 4096 비트의 키를 생성합니다. 키 생성 중에는 암호를 입력해야 하는데, 이 암호는 SSH 키 파일을 사용할 때마다 입력해야 합니다.

2. SSH 키 파일 전송

SSH 키를 생성한 후에는 해당 키 파일을 원격 서버로 전송해야 합니다. Fabric을 사용하면 이 작업을 간단하게 수행할 수 있습니다.

다음의 예제 코드는 로컬 시스템에 있는 SSH 키 파일(~/.ssh/id_rsa.pub)을 원격 서버의 ~/.ssh/authorized_keys 파일에 추가하는 코드입니다.

from fabric import Connection

def add_ssh_key(connection):
    local_ssh_key_file = '~/.ssh/id_rsa.pub'
    remote_ssh_key_file = '~/.ssh/authorized_keys'

    with connection:
        connection.run(f'cat {local_ssh_key_file} >> {remote_ssh_key_file}')

이 코드는 Fabric의 Connection 객체를 사용하여 원격 서버에 접속한 후, cat 명령어를 사용하여 로컬 시스템에 있는 SSH 키를 원격 서버의 authorized_keys 파일에 추가합니다.

3. 서버 접속 설정 강화

Fabric을 사용하여 서버에 접속할 때, 일반적으로 SSH 사용자 이름과 SSH 비밀번호를 지정합니다. 이는 보안에 취약한 점이 될 수 있습니다. 따라서 Fabric을 사용하여 서버 접속 설정을 강화하는 방법을 알아보겠습니다.

다음의 예제 코드는 SSH 비밀번호 없이 특정 사용자로 원격 서버에 접속하는 설정입니다.

from getpass import getpass

from fabric import Connection

def connect_to_server():
    username = input('SSH 사용자 이름: ')
    hostname = input('서버 호스트명: ')

    connection = Connection(hostname=hostname, user=username, connect_kwargs={'password': getpass()})

    return connection

이 코드는 사용자로부터 SSH 사용자 이름과 서버 호스트명을 입력받아, 패스워드 없이 해당 사용자로 원격 서버에 접속하는 Connection 객체를 반환합니다. 이렇게 하면 사용자가 패스워드를 직접 입력하지 않아도 되므로 보안이 강화됩니다.

결론

Fabric을 사용하여 원격 서버에 대한 보안을 강화하는 방법에 대해 알아보았습니다. SSH 키를 생성하고 전송하는 방법, 서버 접속 설정을 강화하는 방법 등을 살펴보았습니다. 이러한 보안 조치를 통해 원격 서버에 접근할 때 안전하게 작업을 수행할 수 있습니다.

참고 자료