This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

tools.tor-ssh-service: init

+139
+18
tools/tor-ssh-service/flake-module.nix
··· 1 + { ... }: 2 + { 3 + perSystem = 4 + { pkgs, ... }: 5 + { 6 + packages.tor-ssh-service = pkgs.writeShellApplication { 7 + name = "tor-ssh-service"; 8 + runtimeInputs = with pkgs; [ 9 + tor 10 + coreutils 11 + gnugrep 12 + procps 13 + qrencode 14 + ]; 15 + text = builtins.readFile ./tor-ssh-service.sh; 16 + }; 17 + }; 18 + }
+121
tools/tor-ssh-service/tor-ssh-service.sh
··· 1 + #!/usr/bin/env bash 2 + set -euo pipefail 3 + 4 + # Default SSH port 5 + SSH_PORT="${SSH_PORT:-22}" 6 + 7 + # Create temporary directory for this tor instance 8 + TOR_DIR=$(mktemp -d -t tor-ssh-service.XXXXXX) 9 + trap 'rm -rf "$TOR_DIR"' EXIT 10 + 11 + # Generate random ports 12 + SOCKS_PORT=$((9050 + RANDOM % 1000)) 13 + CONTROL_PORT=$((SOCKS_PORT + 1)) 14 + 15 + # Create hidden service directory with proper permissions 16 + mkdir -p "$TOR_DIR/hidden_service" 17 + chmod 700 "$TOR_DIR/hidden_service" 18 + 19 + # Create tor configuration 20 + cat > "$TOR_DIR/torrc" <<EOF 21 + DataDirectory $TOR_DIR/data 22 + SocksPort 127.0.0.1:$SOCKS_PORT 23 + ControlPort 127.0.0.1:$CONTROL_PORT 24 + Log notice file $TOR_DIR/tor.log 25 + RunAsDaemon 0 26 + 27 + # Hidden service configuration 28 + HiddenServiceDir $TOR_DIR/hidden_service 29 + HiddenServicePort 22 127.0.0.1:$SSH_PORT 30 + 31 + # Performance and reliability optimizations 32 + CircuitBuildTimeout 15 33 + LearnCircuitBuildTimeout 0 34 + NumEntryGuards 8 35 + KeepalivePeriod 60 36 + SocksTimeout 120 37 + 38 + # Reliability settings 39 + MaxCircuitDirtiness 600 40 + NewCircuitPeriod 30 41 + UseEntryGuards 1 42 + EOF 43 + 44 + echo "Starting Tor hidden service for SSH..." 45 + echo "SSH port: $SSH_PORT" 46 + echo "SOCKS port: $SOCKS_PORT" 47 + echo "" 48 + 49 + # Start tor in background 50 + tor -f "$TOR_DIR/torrc" & 51 + TOR_PID=$! 52 + 53 + # Function to cleanup tor process 54 + cleanup() { 55 + if kill -0 "$TOR_PID" 2>/dev/null; then 56 + kill "$TOR_PID" 2>/dev/null || true 57 + wait "$TOR_PID" 2>/dev/null || true 58 + fi 59 + rm -rf "$TOR_DIR" 60 + } 61 + trap cleanup EXIT INT TERM 62 + 63 + # Wait for tor to bootstrap 64 + echo "Waiting for Tor to bootstrap..." 65 + for i in {1..300}; do 66 + if grep -q "Bootstrapped 100%" "$TOR_DIR/tor.log" 2>/dev/null; then 67 + echo "Tor bootstrapped successfully!" 68 + break 69 + fi 70 + if [ "$i" -eq 300 ]; then 71 + echo "Error: Tor failed to bootstrap" 72 + exit 1 73 + fi 74 + sleep 0.5 75 + done 76 + 77 + # Wait for hidden service to be created 78 + echo "Waiting for hidden service..." 79 + for i in {1..60}; do 80 + if [ -f "$TOR_DIR/hidden_service/hostname" ]; then 81 + break 82 + fi 83 + if [ "$i" -eq 60 ]; then 84 + echo "Error: Hidden service hostname not created" 85 + exit 1 86 + fi 87 + sleep 1 88 + done 89 + 90 + # Display the onion address 91 + ONION_ADDRESS=$(cat "$TOR_DIR/hidden_service/hostname") 92 + echo "" 93 + echo "===============================================" 94 + echo "Tor SSH hidden service is running!" 95 + echo "" 96 + echo "Onion address: $ONION_ADDRESS" 97 + echo "" 98 + 99 + # Generate QR code for easy copying 100 + echo "QR Code for the onion address:" 101 + qrencode -t UTF8 "$ONION_ADDRESS" 102 + echo "" 103 + 104 + echo "To connect from another machine:" 105 + echo " torify ssh $ONION_ADDRESS" 106 + echo "" 107 + echo "Or with a specific user:" 108 + echo " torify ssh user@$ONION_ADDRESS" 109 + echo "" 110 + echo "Press Ctrl+C to stop the service" 111 + echo "===============================================" 112 + echo "" 113 + 114 + # Keep the service running 115 + while true; do 116 + if ! kill -0 "$TOR_PID" 2>/dev/null; then 117 + echo "Tor process died unexpectedly" 118 + exit 1 119 + fi 120 + sleep 5 121 + done