웹사이트 검색

OliveTin이 SSH 없이 브라우저에서 서버 배시 스크립트를 실행하게 해주는 방법


나는 SSH를 좋아하지만, 같은 지루한 명령들을 반복해서 실행하기 위해 그것을 열고 사용자 이름과 비밀번호를 기억해야 하는 것이 싫다. 그 작은 불편함이 바로 내가 처음 이 프로젝트를 시작한 이유다.

저는 홈랩에 몇 대의 서버를 가지고 있는데, 그 중 한 대는 특히 홈 자동화를 제어하기 때문에 항상 관리가 필요하고, 디스크 공간 확인, 백업, 업데이트를 해야 합니다. 이러한 작업들은 어렵지 않고 일부는 자동화되어 있습니다. 하지만 작고 귀찮은 수작업들은 SSH 세션을 열 정도로 중요하게 느껴지지 않습니다.

OliveTin은 이것을 정말 간단한 방식으로 해결했습니다. 덕분에 저는 제 자신의 Bash 스크립트를 브라우저 버튼으로 바꿔 언제든지 홈 네트워크에서 접근하고 클릭할 수 있게 되었습니다. Debian 홈 오퍼레이션 서버에 OliveTin을 네이티브로 설치한 후, 또 다른 보안 SSH 세션의 불편함을 실제 도구로 바꾸었습니다.

내가 진짜로 필요했던 것은 또 다른 관리자 명령 센터가 아니라 버튼 패널이었다

OliveTin은 너무 간단해서 방해되지 않는다






나는 내 홈 오퍼레이션 서버가 또 다른 대시보드가 되는 것을 원하지 않았다. 그 이유는 내가 미션 컨트롤이 있는 휴스턴이 아니라 홈랩을 운영하고 있기 때문이고, 이미 내 삶에는 충분히 쓸모없는 대시보드가 있기 때문이다. 나는 훨씬 더 단순한 것이 필요했다. 이미 신뢰하는 스크립트 몇 개를 위한 버튼 몇 개가 있는 개인 페이지가 필요했다. 내가 필요하지 않은 것은 그래프, 위젯, 플러그인, 또는 전체 서버 관리 콘솔이었다.

OliveTin은 여기에서 완전히 자연스러운 선택입니다. 왜냐하면 본질적으로 사전 정의된 명령을 실행하는 웹 런처이기 때문에 스마트 홈 업그레이드, 자동화, 개인 서버 관리에 이상적이기 때문입니다. 저는 서버 상태 보고서, 저장 공간 보고서, SSH 및 방화벽 켜기 및 끄기, 서버 종료와 같은 작업을 위한 버튼이 필요했습니다. OliveTin은 이름 그대로 정확히 그 일을 합니다.

OliveTin과 함께, 나는 스크립트를 작성하고, 동작을 정의했으며, OliveTin은 웹 서버에서 실행되어 이를 유용한 브라우저 기반 앱으로 바꿉니다. OliveTin의 설치는 충분히 간단합니다. 나는 집의 운영 데비안 서버에 네이티브로 설치하고, 구성 파일을 편집한 후 서비스를 활성화했습니다:

sudo apt install ./OliveTin_linux_amd64.deb
sudo systemctl enable --now OliveTin

OliveTin이 포트 1337에서 작동하기 때문에, 나는 Debian UFW 방화벽에서 이 포트를 허용한 다음, OliveTin을 위한 작은 테스트 구성을 만들어 간단한 버튼으로 일부 기본 시스템 정보를 반환하도록 했습니다. 이는 모두 제대로 작동하는지 확인하기 위한 테스트였습니다:

actions:
  - title: "Hello from home-ops"
    icon: "👋"
    popupOnStart: execution-dialog-stdout-only
    shell: echo "OliveTin is running natively on $(hostname) at $(date)"

그런 다음 서비스를 다시 시작했습니다:

sudo systemctl restart OliveTin

버튼 자체는 아무런 유용한 일을 하지 않았지만, 그게 바로 요점이었어요. 저는 단지 서비스가 실행 중임을 증명하고, 페이지가 로드되며, OliveTin이 브라우저에서 명령 출력 결과를 표시할 수 있다는 것을 보여줄 필요가 있었어요.

OliveTin 버튼은 아이콘에 HTML 엔티티 코드를 사용할 수 있으므로, 더 예쁜 대시보드를 위해 YAML에 작은 이모지 레이블을 추가할 수 있습니다.

내 첫 몇 개의 OliveTin 버튼이 모든 지루한 서버 스크립트를 대체했다

건강 검사, 저장 보고서, 서비스 상태, 내가 스크립트를 만들어 놓고는 아무도 돌보지 않다가 문제가 생길 때까지 방치한 모든 것들

테스트 버튼이 작동하자, OliveTin에서 멋진 버튼으로 더 자주 확인하려고 했던 모든 것들을 교체할 때가 되었다. 그게 내 홈 서버 관리의 절반에 대한 다소 창피한 진실이다. 어떤 명령어가 필요한지도 이미 알고 있다. 대부분의 명령어에 대한 스크립트도 이미 작성했다. 단지 SSH로 들어가서 실행하는 것이 귀찮았을 뿐이다.

그래서 제가 OliveTin에서 처음 만든 버튼들은 기본 서버 관리 작업을 위한 스크립트를 실행하는 것이었습니다:

  • 서버 상태
  • 저장소 보고서
  • 서비스 상태
  • 패키지 업데이트 및 업그레이드
  • 시스템 구성 백업
  • 방화벽 상태

서버 상태 버튼은 내가 보통 수동으로 실행하는 모든 리눅스 모니터링 명령어를 한 번에 모두 연결했습니다. 버튼에 연결된 스크립트는 기본적인 점검을 실행한 후, 결과를 보기 좋은 사람 친화적인 형식으로 반환합니다:

uptime
free -h
df -h /

다른 스크립트들은 부하 평균과 상위 CPU 프로세스를 보여주었고, 덕분에 터미널을 열지 않고도 서버를 잘 파악할 수 있었습니다. 저장 버튼은 여유 디스크 공간, 파일 시스템 사용량, 그리고 가장 큰 /var 디렉토리에 대한 보고서를 생성했습니다. 서비스

상태 버튼이 SSH, OliveTin 자체 및 Docker에서 선택됨.

백업 버튼을 추가하자 올리브틴이 제대로 된 도구처럼 느껴졌다

모든 느슨한 스크립트가 버튼으로 정리되면서, 나는 강력한 내부 도구를 갖게 되었다

모니터링 도구 버튼이 모두 작동하게 되자, 나는 새로운 스크립트와 버튼을 만들어서 무엇인가를 터무니없이 망쳐버렸을 때 가장 다시 가져오고 싶은 구성 파일들을 아카이브하도록 했습니다. 이 스크립트는 호스트 이름, 호스트 파일, SSH 구성, 방화벽 설정, 그리고 OliveTin의 구성 파일과 같은 항목들을 가져옵니다.

tar -czf "$BACKUP_FILE" /etc/hostname /etc/hosts /etc/ssh /etc/ufw /etc/OliveTin

별로 인상적이지 않고 본질적으로 tar를 감싸는 Bash 스크립트일 뿐입니다. 하지만 단순히 cron 작업에 할당하고 계속 작동하기를 바라는 것과 달리 전용 버튼이 생기자 결과물이 다르게 느껴졌습니다. 네, 여전히 모든 것이 Bash이지만, OliveTin은 느슨한 스크립트를 실행하는 일이 귀찮게 느껴지지 않도록 해주었고, 마침내 홈 오퍼스 서버를 위해 제대로 빌드를 완료했다는 의미가 되었습니다.

그런 다음 나는 좀 더 강력한 버튼을 몇 개 추가했다

SSH를 재시작하고 브라우저에서 방화벽을 변경하는 것은 유용하지만, 주의가 필요합니다

위험하지 않은 확인 절차와 백업 버튼이 작동한 후, 나는 OliveTin과 나를 서버에서 잠글 수 있는 잠재성이 있기 때문에 좀 더 주의를 요하는 버튼 몇 개를 추가했다:

  • 방화벽 활성화
  • 방화벽 비활성화
  • 방화벽 규칙 확인
  • SSH 활성화
  • SSH 비활성화

이것들은 여전히 간단한 Bash 스크립트에 연결된 단순한 버튼들이었다:

systemctl start ssh
systemctl stop ssh
systemctl is-active ssh

그 단순함이 바로 OliveTin을 꽤 강력하게 만들 수 있는 요소입니다. SSH 세션이 응답하지 않거나 문제 해결을 위해 방화벽을 빠르게 끄고 켜야 할 때, 해당 옵션이 바로 있어서 온오프를 쉽게 할 수 있습니다. 하지만 헤드리스 서버에서 잘못된 버튼을 클릭한다면, 콘솔 접속을 준비해 두거나 다시 들어갈 다른 방법이 있는 것이 좋습니다.

내 홈 운영 서버에서는 내가 환경을 제어하고 각 버튼이 정확히 무엇을 하는지 알기 때문에 이것이 잘 작동합니다. 만약 내 고양이가 어떤 식으로든 OliveTin을 통해 내 서버에서 나를 차단하게 되더라도 돌아올 방법도 있습니다. 그러나 공개 VPS나 외부에 노출된 서비스에서는 어떤 형태의 인증 없이는 OliveTin을 실행하는 것은 분명히 권장되지 않습니다.

나는 나 자신에게 재부팅과 종료 버튼을 주었다

그런 다음 나는 즉시 취소 버튼을 추가했다

OliveTin에 재시작 및 종료 버튼이 있는 것은 완벽하게 이해가 되었고, 갑작스러운 정전과 같은 시기 동안 빠른 종료가 필요한 다른 서버에도 똑같이 추가하게 될 것입니다. 종료 버튼을 추가한 후 실수로 클릭하고 나서, 타이머와 취소 버튼도 필요하다는 결정을 내렸습니다.

나는 초기 종료 Bash 스크립트를 1분 타이머를 포함하도록 변경했습니다:

shutdown -r +1 "Restart requested from OliveTin"

그런 다음 나는 그들 옆에 취소 파워 액션 버튼을 추가했습니다:

shutdown -c

그 작은 지연 덕분에 내 홈 오퍼레이션 서버가 다운되기 전에 동작을 완전히 취소할 수 있는 충분한 시간이 생겼고, 그와 함께 모든 자동 스마트 홈 조명 제어도 함께 다운될 뻔했다. 이런 강력한 기능은 확실히 안전장치가 필요하다는 것을 상기시켜주는 좋은 경험이었다.

저는 이것을 인터넷에 직접 노출하지 않을 것입니다

OliveTin은 명령어를 실행하기 때문에 유용하지만, 바로 그 이유 때문에 VPS에 두어서는 안 됩니다.

OliveTin은 인증, 사용자, 그룹, 접근 제어와 같은 적절한 보안 기능을 지원하지만, 그렇다고 해서 서버 버튼 전체 페이지를 월드와이드웹에 노출해야 한다는 뜻은 아닙니다.

내 홈 오퍼레이션 서버의 경우, 내가 선호하는 모델은 신뢰할 수 있는 접근 전용입니다. 포트 1337을 로컬 접근만 가능하도록 잠그는 것이 꽤 중요하며, 만약 정말로 내 네트워크 외부에서 접근이 필요하다면 포트 포워딩보다는 Tailscale 같은 것 뒤에 두는 것이 좋습니다.

OliveTin의 내장 로그인 지원을 사용하지 않고 그것을 보호하지 않는 이유에 대한 질문은 여전히 남아 있으며, 이는 타당한 질문입니다. 제 대답은 이것이 일반적인 웹 앱이 아니기 때문인데, 전체 작업이 명령을 실행하는 것이기 때문에 위협 모델이 충분히 달라져서 방화벽 뒤에 두는 것이 필요하다는 것입니다.

나는 그것을 유지하고 있지만, 이미 신뢰하는 스크립트에만 해당한다

OliveTin은 SSH를 대체하지는 않았지만, 많은 불필요한 SSH 세션을 제거했습니다

OliveTin은 결코 완전한 서버 관리 패널이 되도록 설계되지 않았으며, 바로 그 점 때문에 제가 원했던 것입니다. 이미 스크립트를 가지고 있는 작업만 노출하기 때문에 더 좋습니다. 버튼이나 스크립트가 없으면, 그냥 하나를 만들어서 실행할 수 없습니다.

저는 여전히 구성 편집이나 로그 작업 같은 실제 리눅스 서버 작업을 위해 SSH가 필요하며, 브라우저 버튼이 그걸 대신할 수는 없습니다. 하지만 제가 직접 스크립트를 작성했기 때문에 신뢰할 수 있는 작은 작업에서는 OliveTin이 완벽합니다. SSH로 접속해서 실행해야 했던 작업은 게으름 때문에 실행하지 않게 되곤 했고, 그 결과 제 서버 성능이 저하되곤 했기 때문입니다.

그래서 저는 OliveTin을 제 홈 운영 서버에 두고 있으며, 제가 소홀히 하고 있던 다른 서버에도 실제로 배포할 계획입니다. 저는 여전히 실제 작업을 위해 SSH가 필요하지만, 지루한 스크립트를 실행할 때마다 매번 열고 싶지는 않습니다. 이를 위해서는 버튼이 훨씬 낫습니다.

관련기사