Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- cleanup() {
- ssh -S /dev/shm/real-vncviewer-over-ssh_ctl_path_$PORT -O exit root@$ADDRESS &>/dev/null
- rm /dev/shm/real-vncviewer-over-ssh_error_log_$PORT &>/dev/null
- kill $(jobs -pr) &>/dev/null
- }
- ARGS=${@:1:$((${#@} - 1))}
- ADDRESS=${@:${#@}}
- if [ -z "$ADDRESS" ]; then
- if [ -t 0 ]; then
- read -p "remote address: " -t 300 ADDRESS
- else
- LAST=$(tail -n1 $HOME/.real-vncviewer-over-ssh_history 2>/dev/null)
- HISTORY=$(tac $HOME/.real-vncviewer-over-ssh_history 2>/dev/null|tr '\n' ' '|sed 's/^[^ ]* //')
- case $(lsb_release -r -s 2>/dev/null) in
- 12.04)
- ADDRESS=$(zenity --entry --window-icon=/usr/share/pixmaps/real-vncviewer.png --title="VNC Viewer Over SSH" --text="remote address:" --entry-text="$LAST")
- ;;
- *)
- ADDRESS=$(zenity --entry --window-icon=/usr/share/pixmaps/real-vncviewer.png --title="VNC Viewer Over SSH" --text="remote address:" --entry-text="$LAST" $HISTORY)
- ;;
- esac
- fi
- fi
- if [ -z "$ADDRESS" ]; then
- exit
- fi
- export HISTCONTROL=erasedups
- export HISTSIZE=10
- history -r $HOME/.real-vncviewer-over-ssh_history
- history -s $ADDRESS
- history -w $HOME/.real-vncviewer-over-ssh_history
- PORT=$((RANDOM%20000+40000))
- while true; do
- (echo >/dev/tcp/localhost/$PORT) &>/dev/null && PORT=$((RANDOM%20000+40000)) || break
- done
- trap "cleanup" SIGHUP SIGINT SIGTERM EXIT
- if [ -t 0 ]; then
- ssh -o StrictHostKeyChecking=no -o ExitOnForwardFailure=yes -TNfL $PORT:127.0.0.1:5900 -M -S /dev/shm/real-vncviewer-over-ssh_ctl_path_$PORT root@$ADDRESS &
- else
- while true; do echo; sleep 1; done | zenity --progress --auto-kill --pulsate --window-icon=/usr/share/pixmaps/real-vncviewer.png --title="VNC Viewer Over SSH" --text="creating ssh tunnell to root@$ADDRESS" &
- ZENITY_PROGRESS_PID=$!
- ssh -o StrictHostKeyChecking=no -o ExitOnForwardFailure=yes -TNfL $PORT:127.0.0.1:5900 -M -S /dev/shm/real-vncviewer-over-ssh_ctl_path_$PORT root@$ADDRESS &>/dev/shm/real-vncviewer-over-ssh_error_log_$PORT &
- fi
- SSH_PID=$!
- wait $SSH_PID
- SSH_EXIT_STATUS=$?
- if [ -n "$ZENITY_PROGRESS_PID" ]; then
- kill $ZENITY_PROGRESS_PID
- fi
- if [ $SSH_EXIT_STATUS -ne 0 ]; then
- if ! [ -t 0 ] && [ -r /dev/shm/real-vncviewer-over-ssh_error_log_$PORT ]; then
- zenity --error --window-icon=/usr/share/pixmaps/real-vncviewer.png --title="VNC Viewer Over SSH" --text="<b>remote address: $ADDRESS</b>\n\n$(</dev/shm/real-vncviewer-over-ssh_error_log_$PORT)"
- fi
- exit $SSH_EXIT_STATUS
- fi
- real-vncviewer WarnUnencrypted=0 $ARGS 127.0.0.1:$PORT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement