# 🐳 Docker Ubuntu Setup Guide with SSH & Local Chat Server Access (Onion link) labs.play-with-docker.com #################################################################### Join our telegram channel: https://t.me/LinuxClassesEFXTv #################################################################### Go to https://labs.play-with-docker.com/ or setup docker in local machine Paste the public keys we are going to generate in in local machine to the location ~/.ssh/authorized_keys Generate ssh keys in local machine $ mkdir ~/sshserver $ cd sshserver $ ssh-keygen -t ed25519 (Enter the phrase 2 times) # Paste the keys to the lab.play-with-docker.com in vi ~/.ssh/authorized_keys # Connect to machine labs.play*** chmod 600 keyname ssh -i ~/sshserver/keyname ********************.labs.play-with-docker.com #################################################################### ## Step 1: Pull the Ubuntu Docker Image docker pull ubuntu #################################################################### ## Step 2: Create and Start the Docker Container docker run -dit --name chatserver -p 2222:22 -p 8080:8080 ubuntu #EXPLAIN: Syntax Part Explanation docker run This is the base Docker command to create and start a new container from an image. -d Detached mode — runs the container in the background. You won’t see its output directly. -i Interactive mode — keeps STDIN open for input, useful when working inside the container. -t TTY (terminal) — allocates a pseudo-terminal. Allows you to run shell/bash commands. --name sshbox Assigns a custom name to the container (sshbox in this case) for easier reference. -p 2222:22 Port mapping → Maps host port 2222 to container’s port 22 (commonly used by SSH). -p 8080:8080 Maps host port 8080 to container’s 8080 — useful for running a web server. ubuntu The base image to use here, we’re pulling and running the official Ubuntu image. #################################################################### ## Step 3: Access the Container docker exec -it chatserver bash EXPLAIN: docker exec Runs a command inside an already running container. -i Interactive mode — keeps STDIN open so you can type commands. -t TTY (pseudo-terminal) — gives you a usable terminal inside the container. sshbox The name of the container you want to connect to (as set earlier). bash The command you want to run inside the container — here it's bash shell. #################################################################### ## Step 4: Set Up Inside the Container apt update && apt upgrade -y;apt install -y openssh-server python3-full curl wget php vim sudo unzip net-tools sudo passwd root ## Step 7: Enable SSH Login nano /etc/ssh/sshd_config # Set the following: PermitRootLogin yes PasswordAuthentication yes # Then restart SSH: mkdir -p /var/run/sshd service ssh restart ## Step 9: Shared Directory mkdir -p /root/shared # Try to connect to ssh in docker ssh root@localhost ## Step 8: This detaches you from a Docker container’s terminal without stopping it. Ctrl + P then Ctrl + Q # Try to connect outside the docker container ssh root@localhost # Create and activate Python virtual environment python3 -m venv myenv source myenv/bin/activate # Install pyngrok pip install pyngrok # ngrok config add-authtoken YOUR_AUTH_TOKEN ngrok config add-authtoken ************************************** # Start ngrok tcp 2222 ngrok tcp 2222 # Then forward SCP: (join our telegram to get the file) scp -P PORT chat.zip root@IPADDRESS:/root/shared # Close the tunnel once copied ctrl + c #################################################################### ## Step 6: Resume the docker container docker start -ai chatserver EXPLAIN: Syntax Part Explanation docker start Starts a stopped container (does not create a new one). -a Attach — connects your terminal to the container’s STDOUT/STDERR output. -i Interactive mode — keeps STDIN open so you can interact with the container. sshbox The name of the container you want to start (defined earlier with --name). #################################################################### #################################################################### ## Step 11: Start local werb server in background php -S 0.0.0.0:8080 > /dev/null 2>&1 & EXPLAIN: php -S 0.0.0.0:8080 Starts PHP’s built-in server on all interfaces (0.0.0.0) and listens on port 8080. Useful for serving a local website or PHP app. > /dev/null Redirects standard output (stdout) to /dev/null, essentially hides normal output. 2>&1 Redirects standard error (stderr) to the same place as stdout — i.e., also hidden. & Runs the whole command in the background, so your terminal is free for other tasks. #################################################################### ## Detaches from Docker container AGAIN Ctrl + P then Ctrl + Q ## Step 12: Start http server ngrok http localhost:8080 ## Step 13: Reattach to Container (Optional) docker attach sshbox ## Fix SSH WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! # Error: Host key verification failed # Solution: vi ~/.ssh/known_hosts # Delete line with: [localhost]:2222 # Retry SSH: ssh root@localhost -p 2222 #################################################################### ✅ Step-by-Step: Expose Your PHP Server via Tor 🛠️ 1. Install Tor On Ubuntu/Debian: sudo apt update sudo apt install tor 📂 2. Edit Tor Configuration sudo vi /etc/tor/torrc At the end, add the following lines: HiddenServiceDir /var/lib/tor/php_hidden_service/ HiddenServicePort 80 127.0.0.1:8080 🔄 3. Restart Tor sudo systemctl restart tor 🧪 Example Combined Setup php -S 127.0.0.1:8080 > /dev/null 2>&1 & ✅ Workaround: Start Tor Manually (Without systemd) tor & ✅ Check Tor Output cat /var/lib/tor/php_hidden_service/hostname #################################################################### Create onion link in termux #################################################################### # Set up a Tor-accessible PHP website on Termux # Step 1: Update & install required packages pkg update && pkg upgrade -y pkg install tor php wget git -y # Step 2: Create PHP site mkdir -p ~/website cat << 'EOF' > ~/website/index.php EOF # Get in to project root chmod -R 755 ~/website chmod -w index.php cd ~/website # Start PHP server php -S 127.0.0.1:8080 or php -S 127.0.0.1:8080 -t /sdcard/web or python3 -m http.server 8080 # Step 3: Configure Tor hidden service mkdir -p ~/.tor/hidden_service chmod 700 ~/.tor/hidden_service cat << 'EOF' > ~/.torrc HiddenServiceDir /data/data/com.termux/files/home/.tor/hidden_service/ HiddenServicePort 80 127.0.0.1:8080 EOF # Step 4: Start Tor service tor # Step 5: Get the .onion link cat ~/.tor/hidden_service/hostname # Done! Visit page