모든 명령을 웹 서버화
11946 단어 ShellScriptGo 언어서버5
Go 언어로 만들고 있기 때문에 크로스 플랫폼에서 사용할 수 있습니다.
viewb -Github
사용법은 간단.
이런 식으로 viewb 뒤에 웹 서버화하고 싶은 명령을 계속하면 ...
실행 예
$viewb ls -l /
이렇게 결과를 브라우저에서 확인할 수 있습니다.
액세스 할 때마다 명령이 실행되므로 최신 결과가 항상 반환됩니다.
명령 대신 스크립트를 지정하면 스크립트도 실행할 수 있습니다.
외부 네트워크와의 도통을 확인해 보거나
핑
$viewb ping -c 1 8.8.8.8
프로그램 테스트를 실행하여 결과를 확인하거나
GoTest
$viewb go test
의미없이 서버를 세워 보거나
ItWorks
$viewb echo It works!
사용법은 무한대.
BASIC 인증으로 열쇠를 걸 수도 있습니다. ※인증이 통과할 때까지 명령은 실행되지 않습니다.
balse
$viewb -user laputa -pass balse echo booomb!
내용
다음은 viewb 명령의 소스입니다. Go 언어로 만들고 있습니다.
하는 것이 단순한 만큼 있고 내용도 간단합니다.
독립형 웹 서버를 쉽게 통합하고 배포할 수 있는 것은 Go 언어의 큰 매력이군요.
viewb.go
package main
import (
"flag"
"fmt"
"net/http"
"os"
"os/exec"
"runtime"
"strconv"
"strings"
)
var (
port int
user string
pass string
com string
)
func main() {
//parse args
flag.IntVar(&port, "p", 8080, "port /default:8080")
flag.StringVar(&user, "user", "", "user (BASIC AUTH)")
flag.StringVar(&pass, "pass", "", "pass (BASIC AUTH)")
flag.Parse()
com = strings.Join(flag.Args(), " ")
//start server
fmt.Println("http://localhost" + ":" + strconv.Itoa(port))
fmt.Println("Stop: Ctrl+C")
http.HandleFunc("/", handler)
err := http.ListenAndServe(":"+strconv.Itoa(port), nil)
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
os.Exit(1)
}
}
//handler: command result
func handler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain; charset=UTF-8")
if auth(r) == false {
w.Header().Set("WWW-Authenticate", `Basic realm="MY REALM"`)
w.WriteHeader(401)
w.Write([]byte("401 Unauthorized\n"))
return
}
fmt.Fprint(w, cmd(com))
}
//exec command
func cmd(commandString string) string {
var command string
var op string
if runtime.GOOS == "windows" {
command = "cmd"
op = "/c"
} else {
command = "/bin/sh"
op = "-c"
}
out, err := exec.Command(command, op, commandString).Output()
if err != nil {
return string(err.Error())
}
return string(out)
}
//basic auth
func auth(r *http.Request) bool {
if user == "" || pass == "" {
return true
}
_user, _pass, ok := r.BasicAuth()
if ok == false {
return false
}
return _user == user && _pass == pass
}
요약
실행 파일은 여기에서 삭제할 수 있습니다.
viewb에서 viewb를 실행하면 귀찮은 일이 될 수 있으므로 중지합시다.
Reference
이 문제에 관하여(모든 명령을 웹 서버화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kurehajime/items/4b0b7cd9ff3494c18eaf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)