다음과 같은 질문이 있습니다.
웹 인터페이스를 통해 일부 데이터를 제공하는 SSH를 통해 액세스할 수 있는 원격 시스템이 있습니다.
OpenSSH LocalForwarding을 사용하여 터널을 열고 원격 서버를 시작할 수 있습니다.
ssh [email protected] -L 127.0.0.1:3333:localhost:4000 ./start.sh
그런 다음 다른 터미널(또는 GUI)에서 다음과 같이 브라우저를 시작할 수 있습니다.
firefox localhost:3333/whatever
내 앱에서 제공하는 콘텐츠에 액세스할 수 있습니다.
사용한 후 [CTRL-C]만 입력하면 start.sh
서버, 연결, 터널이 닫힙니다.
여태까지는 그런대로 잘됐다.
문제는 브라우저가 종료될 때 터널이 닫히도록 모든 것을 결합하는 스크립트를 작성하는 것이 가능합니까?
보다 정확하게는 스크립트를 원합니다.
- 터널을 열고 원격 서버를 시작합니다(위와 같이).
- 올바른 포트에서 브라우저를 자동으로 엽니다(임의로 생성될 수 있음)(firefox는 가능하지만 필수는 아님).
- 브라우저가 실행되는 동안 터널을 계속 실행하세요.
- 브라우저가 종료되면(다른 열려 있는 창이 있을 수 있다는 것을 알고 있지만 이는 요점을 벗어났습니다)
SIGHUP
server() 에 신호를 보내야 합니다start.sh
. - 원격 서버가 종료되면 터널이 닫혀야 합니다(위 설정을 사용하면 자동으로 수행되어야 함).
터널을 지키고 싶어그리고서버는 엄격히 요구되는 시간 내에 가동되어 실행되므로 수동으로 종료해야 할 경우 발생할 수 있는 "종료를 잊어버리는" 일이 발생하지 않습니다.
어떻게 해야 하나요?
답변1
귀하의 질문에 대부분의 단계를 설명하신 것 같습니다. 이것은 귀하가 요청한 내용과 거의 같습니다.
#!/bin/sh
# start ssh in the background, and record the pid in $ssh_pid.
ssh -n -L 127.0.0.1:3333:localhost:4000 [email protected] ./start.sh &
ssh_pid=$!
# start firefox. we're not running it in the background, so the
# script blocks here until firefox terminates.
firefox localhost:3333/whatever
# kill the ssh process
kill $ssh_pid
원격 서버가 종료되면 터널이 닫혀야 합니다(위 설정을 사용하면 자동으로 수행되어야 함).
원격 ./start.sh
명령이 종료 되면 종료됩니다 ssh
. 이 경우 이 스크립트는 Firefox를 종료하지 않지만 터널은 더 이상 존재하지 않습니다.
답변2
대답은 예상보다 조금 더 복잡해 보입니다.
결국 서버에 대한 완전한 초기화 스크립트를 작성했습니다.
#!/bin/sh
# use start-stop-daemon to control zero-ui
set -e
# Must be a valid filename
NAME=zero-ui
PIDFILE=/home/user/$NAME.pid
DAEMON=/usr/bin/node
DAEMON_OPTS="/home/user/zero-ui/backend/bin/www"
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
export NODE_ENV=production
export ZU_SECURE_HEADERS=false
export ZU_SERVE_FRONTEND=true
export ZU_CONTROLLER_TOKEN=...
export ZU_DISABLE_AUTH=true
export ZU_DEFAULT_USERNAME=...
export ZU_DEFAULT_PASSWORD=...
case "$1" in
start)
echo -n "Starting daemon: "$NAME
start-stop-daemon --start --quiet --pidfile $PIDFILE -m --exec $DAEMON --chdir /home/user/zero-ui/backend -- $DAEMON_OPTS
echo "."
;;
stop)
echo -n "Stopping daemon: "$NAME
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
echo "."
;;
*)
echo "Usage: "$1" {start|stop}"
exit 1
esac
exit 0
그런 다음 다음 스크립트를 사용하여 호출합니다.
#!/bin/sh
set -e
ssh -n -L 127.0.0.1:3333:localhost:4000 user@server ./start-stop-zeroui start &
firefox localhost:3333/app
ssh user@server ./start-stop-zeroui stop
fg
@larsks 또는 다른 사람이 더 나은 답변을 제시하면 기꺼이 그들의 답변을 받아들이고, 그렇지 않으면 며칠 내에 내 답변을 수락하겠습니다.
이 아이디어에 영감을 준 @larsks에게 엄지손가락을 치켜세웠습니다.