리눅스 명령 실행을 원격 서버에서 실행할 수 있는 능력은 시스템 관리자, 소프트웨어 엔지니어 또는 소프트웨어 개발자에게 일반적인 작업입니다.
이것이 바로 원격 시스템을 관리해야 하는 사람들을 위한 필수 도구로 만드는 것이, SSH를 통해 원격으로 리눅스 명령을 실행하는 것을 설계한 고수준의 Fabric 라이브러리입니다. Python을 사용하여 파워를 활용하면서 원격 서버를 관리할 수 있는 라이브러리입니다.
패브릭이란?
Fabric은 SSH 연결을 통해 원격 서버에서 쉘 명령을 실행하는 프로세스를 단순화하는 다재다능한 Python 라이브러리입니다. 이것은 처음에 Jeff Forcier에 의해 개발되었으며 후에 오픈 소스 프로젝트가 되었습니다.
이것은 원격 시스템을 작업하기 위한 고수준의, 파이썬스러운 인터페이스를 제공하여 작업을 자동화하고 코드를 배포하며 다중 서버에서 구성을 관리할 수 있게 합니다.
패브릭을 사용하는 이유?
원격 명령 실행 요구 사항에 Fabric를 선택해야 하는 몇 가지 중요한 이유가 있습니다:
- 파이썬적 접근 – Fabric은 파이썬 철학을 따르며, 이미 익숙한 언어로 스크립트를 작성하는 개발자와 시스템 관리자에게 용이합니다.
- SSH 및 Paramiko – Fabric은 안전하고 신뢰할 수 있는 방법으로 원격으로 명령을 실행하는 Paramiko 라이브러리에 의존합니다.SSH 연결 처리
- 작업 기반 워크플로우 – Fabric은 원격 명령 실행에 대한 작업 지향 접근을 장려합니다. 작업을 정의하면, 이는 본질적으로 파이썬 함수이며, Fabric이 원격 서버에서 이를 실행하는 것을 처리합니다.
- 사용 사례 – Fabric은 애플리케이션 배포, 서버 구성 관리, 시스템 유지 관리 작업 등 다양한 사용 사례에 적합한 다목적 도구입니다.
이 가이드에서는 Fabric을 사용하여 그룹 서버의 서버 관리를 개선하는 방법과 시작하는 단계를 다룰 것입니다.
Linux에서 Fabric 자동화 도구 설치 방법
패브릭의 중요한 특징 중 하나는 관리해야 하는 원격 머신이 표준 OpenSSH 서버만 설치되어 있으면 된다는 것입니다.
서버에서 원격 서버를 관리하기 전에 서버에 특정 요구 사항을 설치해야 합니다.
요구 사항:
- Python 2.5+와 개발 헤더
- Python-setuptools 및 pip(선택 사항이지만 권장) gcc
Fabric은 pip 패키지 관리자를 사용하여 쉽게 설치할 수 있지만, 기본 패키지 관리자 yum, dnf, 또는 apt/apt-get를 선택하여 fabric 패키지를 설치하고 싶을 수도 있으며, 일반적으로 fabric 또는 python-fabric라고 합니다.
RHEL 시스템에서 Fabric 설치
레드햇 기반 배포판(RHEL-based distributions)에서는 예를 들어 CentOS Stream, Rocky Linux, AlmaLinux와 같은 시스템에서 EPEL 저장소를 설치하고 활성화해야 fabric 패키지를 설치할 수 있습니다.
sudo dnf install epel-release sudo dnf install fabric
데비안 기반 시스템에서 Fabric 설치하기
데비안 기반 배포판(Debian-based distributions)에서는 예를 들어 Ubuntu와 Linux Mint 사용자들은 apt를 사용하여 fabric 패키지를 간단하게 설치할 수 있습니다.
sudo apt install fabric
PiP를 사용하여 Fabric 설치하기
fabric이 시스템 저장소에서 사용 가능하지 않은 경우 pip를 사용하여 설치할 수 있습니다.
sudo yum install python3-pip [On RedHat based systems] sudo dnf install python3-pip [On Fedora 22+ versions] sudo apt install python3-pip [On Debian based systems]
pip가 성공적으로 설치되면 pip를 사용하여 fabric의 최신 버전을 다운로드할 수 있습니다.
pip3 install fabric
Fabric를 사용하여 Linux 관리 작업 자동화하기
이제 Fabric를 사용하는 방법에 대해 알아보겠습니다. 설치 과정에서 'fab'
라는 Python 스크립트가 시스템 PATH의 디렉토리에 추가됩니다. 'fab'
스크립트는 Fabric를 사용할 때 모든 작업을 처리합니다.
로컬에서 리눅스 명령어 실행
관례에 따라, 먼저 즐겨찾는 텍스트 편집기를 사용하여 fabfile.py
라는 이름의 Python 파일을 만들어야 합니다. 이 파일의 이름을 원하는대로 바꿀 수 있지만, 다음과 같은 파일 경로를 지정해야 합니다.
fab --fabfile /path/to/the/file.py
Fabric는 작업을 실행하기 위해 'fabfile.py'
를 사용하며, 'fabfile'
는 Fabric 도구를 실행하는 디렉토리에 있어야 합니다.
예제 1: 먼저 기본적인 Hello World
를 만들어 보겠습니다.
# vi fabfile.py
파일에 다음과 같은 코드를 추가하세요.
def hello(): print('Hello world, Tecmint community')
파일을 저장하고 아래 명령어를 실행하세요.
# fab hello

이제 fabfile.py의 예시를 살펴보면서 로컬 머신에서 uptime 명령어를 실행하는 방법을 알아보겠습니다.
예제 2: 다음과 같이 새로운 fabfile.py 파일을 열어보세요.
# vi fabfile.py
그리고 파일에 다음과 같은 코드를 붙여넣으세요.
#! /usr/bin/env python from fabric.api import local def uptime(): local('uptime')
그런 다음 파일을 저장하고 다음 명령어를 실행하세요.
# fab uptime

SSH를 통해 원격으로 리눅스 명령어 실행
Fabric API는 env
라는 구성 사전을 사용합니다. 이는 Fabric의 동작을 제어하는 값을 저장하는 Python의 연관 배열과 동일한 것입니다.
env.hosts
는 Fabric 작업을 실행하려는 서버 목록입니다. 네트워크가 192.168.0.0이고 192.168.0.2와 192.168.0.6 호스트를 fabfile로 관리하려면 env.hosts를 다음과 같이 구성할 수 있습니다:
#!/usr/bin/env python from fabric.api import env env.hosts = [ '192.168.0.2', '192.168.0.6' ]
위의 코드 줄은 Fabric 작업을 실행할 호스트만 지정하고 그 이상의 작업은 수행하지 않습니다. 따라서 일부 작업을 정의할 수 있으며, Fabric은 원격 기기와 상호 작용하는 데 사용할 수 있는 함수 세트를 제공합니다.
함수는 많지만 가장 일반적으로 사용되는 함수는 다음과 같습니다:
- run – 원격 기기에서 쉘 명령을 실행합니다.
- local – 로컬 기기에서 명령을 실행합니다.
- sudo – 원격 기기에서 루트 권한으로 쉘 명령을 실행합니다.
- Get – 원격 기기에서 하나 이상의 파일을 다운로드합니다.
- Put – 원격 기기에 하나 이상의 파일을 업로드합니다.
예시 3: 여러 기기에서 메시지를 출력하려면 아래와 같은 fabfile.py
를 만듭니다.
#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def echo(): run("echo -n 'Hello, you are tuned to Tecmint ' ")
작업을 실행하려면 다음 명령을 실행하십시오:
# fab echo

예시 4: 이전에 만든 fabfile.py
를 개선하여 로컬 시스템에서 uptime 명령어를 실행하고 uptime 명령어를 실행하며 다수의 시스템에서 df 명령어를 사용하여 디스크 사용량을 확인할 수 있도록 수정할 수 있습니다.
#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def uptime(): run('uptime') def disk_space(): run('df -h')
파일을 저장한 후 다음 명령어를 실행하세요:
# fab uptime # fab disk_space

원격 Linux 서버에서 LAMP 스택을 자동으로 설치하기
예시 4: 원격 Linux 서버에서 LAMP (Linux, Apache, MySQL/MariaDB, PHP) 서버를 배포하는 예시를 살펴보겠습니다.
LAMP를 루트 권한을 사용하여 원격으로 설치할 수 있는 함수를 작성할 것입니다.
RHEL/CentOS 및 Fedora용
#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def deploy_lamp(): run ("yum install -y httpd mariadb-server php php-mysql")
Debian/Ubuntu 및 Linux Mint용
#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def deploy_lamp(): sudo("apt-get install -q apache2 mysql-server libapache2-mod-php php-mysql")
파일을 저장한 후 다음 명령어를 실행하세요:
# fab deploy_lamp
참고: 많은 양의 출력 때문에 이 예시에 대한 스크린캐스트(애니메이션 GIF)를 만들 수 없습니다.
이제 위에서 제공된 패브릭과 그 기능 및 예시를 사용하여 Linux 서버 관리 작업을 자동화 할 수 있습니다…
패브릭 유용한 옵션
- 도움말 정보와 사용 가능한 명령줄 옵션 목록을 보려면
fab --help
를 실행하세요. --fabfile=PATH
옵션은fabfile.py
외의 다른 Python 모듈 파일을 가져올 수 있게 도와줍니다.- 원격 호스트에 연결할 때 사용할 사용자 이름을 지정하려면
--user=USER
옵션을 사용하세요. - 인증 및/또는 sudo에 대한 암호를 사용하려면
--password=PASSWORD
옵션을 사용하세요. - 명령 이름에 대한 자세한 정보를 인쇄하려면
--display=NAME
옵션을 사용하세요. - 포맷을 보려면
--list
옵션을 사용하고, 선택: short, normal, nested,--list-format=FORMAT
옵션을 사용하세요. - 가능한 명령 목록을 인쇄하고 종료하려면
--list
옵션을 포함하세요. - 사용할 설정 파일의 위치를 지정하려면
--config=PATH
옵션을 사용하세요. - 오류 출력에 색상을 표시하려면
--colorize-errors
를 사용하세요. - 프로그램의 버전 번호를 보고 종료하려면
--version
옵션을 사용하세요.
요약
Fabric은 SSH를 통한 원격 명령 실행을 간소화하는 강력한 Python 라이브러리로, 복잡한 작업을 간소화하고 시스템 관리를 자동화하는 기능으로 시스템 관리자, 개발자 및 DevOps 전문가에게 귀중한 도구입니다.
서버 한 대를 관리하거나 대규모 배포를 조정하더라도, Fabric은 작업을 효율적이고 효과적으로 완료하는 데 도움이 될 수 있습니다.
Source:
https://www.tecmint.com/automating-linux-system-administration-tasks/