Compare commits
	
		
			21 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 445e08c4d2 | ||
|  | 7bc2193d09 | ||
| f0049c7f06 | |||
| b5d57817cf | |||
| 1e3f7f671d | |||
| 00f3b3ab45 | |||
|  | 19a42a596c | ||
|  | de2290dd3e | ||
|  | 7db8a7a4ae | ||
| ceddf444b0 | |||
| 76ec7eb066 | |||
|  | 05dab9a52c | ||
| 20321b2fbe | |||
| 8bf4bfc7c0 | |||
| 4f0db8bc9c | |||
| 52d344c6e9 | |||
| 8ffc30797a | |||
| 909b479265 | |||
| 8589a66fca | |||
| 461166d3e3 | |||
| 41d8674519 | 
| @ -1,8 +1,7 @@ | ||||
| # Telebit™ Remote | ||||
| # Telebit™ Remote | a [Root](https://rootprojects.org) project | ||||
| 
 | ||||
| Because friends don't let friends localhost™ | ||||
| 
 | ||||
| | Sponsored by [ppl](https://ppl.family) | ||||
| | **Telebit Remote** | ||||
| | [Telebit Relay](https://git.coolaj86.com/coolaj86/telebit-relay.js) | ||||
| | [sclient](https://telebit.cloud/sclient) | ||||
| @ -121,8 +120,8 @@ Windows & Node.js | ||||
| 1. Install [node.js](https://nodejs.org) | ||||
| 2. Open _Node.js_ | ||||
| 2. Run the command `npm install -g telebit` | ||||
| 2. Copy the example daemon conifg to your user folder `.config/telebit/telebitd.yml` (such as `/Users/John/.config/telebit/telebitd.yml`) | ||||
| 2. Copy the example remote conifg to your user folder `.config/telebit/telebit.yml` (such as `/Users/John/.config/telebit/telebit.yml`) | ||||
| 2. Copy the example daemon config to your user folder `.config/telebit/telebitd.yml` (such as `/Users/John/.config/telebit/telebitd.yml`) | ||||
| 2. Copy the example remote config to your user folder `.config/telebit/telebit.yml` (such as `/Users/John/.config/telebit/telebit.yml`) | ||||
| 2. Change the email address | ||||
| 2. Run `npx telebit init` and follow the instructions | ||||
| 2. Run `npx telebit list` | ||||
|  | ||||
| @ -98,16 +98,7 @@ function askForConfig(state, mainCb) { | ||||
|   var firstSet = [ | ||||
|     function askEmail(cb) { | ||||
|       if (state.config.email) { cb(); return; } | ||||
|       //console.info("");
 | ||||
|       console.info("Welcome!"); | ||||
|       console.info(""); | ||||
|       console.info("By using Telebit you agree to:"); | ||||
|       console.info(""); | ||||
|       console.info("    [x] Accept the Telebit™ terms of service"); | ||||
|       console.info("    [x] Accept the Let's Encrypt™ terms of service"); | ||||
|       console.info(""); | ||||
|       console.info("Enter your email to agree and login/create your account:"); | ||||
|       console.info(""); | ||||
|       console.info(TPLS.remote.setup.email); | ||||
|       // TODO attempt to read email from npmrc or the like?
 | ||||
|       rl.question('email: ', function (email) { | ||||
|         email = /@/.test(email) && email.trim(); | ||||
| @ -548,7 +539,7 @@ function getToken(err, state) { | ||||
|           console.error(err); | ||||
|           return; | ||||
|         } | ||||
|         console.info("waiting..."); | ||||
|         console.info(TPLS.remote.waiting.replace(/{email}/, state.config.email)); | ||||
|         next(); | ||||
|       }); | ||||
|     } | ||||
| @ -583,18 +574,12 @@ function getToken(err, state) { | ||||
|   , end: function () { | ||||
|       utils.putConfig('enable', [], function (err) { | ||||
|         if (err) { console.error(err); return; } | ||||
|         console.info("Success"); | ||||
|         console.info(TPLS.remote.success); | ||||
| 
 | ||||
|         // workaround for https://github.com/nodejs/node/issues/21319
 | ||||
|         if (state._useTty) { | ||||
|           setTimeout(function () { | ||||
|             console.info("Some fun things to try first:\n"); | ||||
|             console.info("    ~/telebit http ~/public"); | ||||
|             console.info("    ~/telebit tcp 5050"); | ||||
|             console.info("    ~/telebit ssh auto"); | ||||
|             console.info(); | ||||
|             console.info("Press any key to continue..."); | ||||
|             console.info(); | ||||
|             console.info(TPLS.remote.next_steps); | ||||
|             process.exit(0); | ||||
|           }, 0.5 * 1000); | ||||
|           return; | ||||
|  | ||||
							
								
								
									
										0
									
								
								bin/telebit.js
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								bin/telebit.js
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @ -289,12 +289,16 @@ controllers.ssh = function (req, res, opts) { | ||||
|   function sshSuccess() { | ||||
|     //state.config.sshAuto = state.sshAuto;
 | ||||
|     saveConfig(function (err) { | ||||
|       var local = state.config.sshAuto; | ||||
|       if (false !== local && !local) { | ||||
|         local = 22; | ||||
|       } | ||||
|       res.setHeader('Content-Type', 'application/json'); | ||||
|       res.end(JSON.stringify({ | ||||
|         success: true | ||||
|       , active: true | ||||
|       , remote: Object.keys(state.config.ports)[0] | ||||
|       , local: state.config.sshAuto || 22 | ||||
|       , local: local | ||||
|       , saved: !err | ||||
|       , module: 'ssh' | ||||
|       })); | ||||
|  | ||||
| @ -6,7 +6,7 @@ Telebit Remote is the T-Rex long-arm of the Internet. UNSTOPPABLE! | ||||
| 
 | ||||
| Using reliable HTTPS tunneling to establishing peer-to-peer connections, | ||||
| Telebit is empowering the next generation of tinkerers. Access your devices. | ||||
| Share your stuff. Be UNSTOPPABLE! (Join us at https://ppl.family) | ||||
| Share your stuff. Be UNSTOPPABLE! (Join us at https://rootprojects.org) | ||||
| 
 | ||||
| Usage: | ||||
| 
 | ||||
| @ -59,7 +59,7 @@ Use \"telebit help [command]\" for more information about a command, including f | ||||
| 
 | ||||
| Copyright 2015-2018 AJ ONeal https://telebit.cloud MPL-2.0 Licensed (RAWR!)" | ||||
| 
 | ||||
| status = "usage: telebit status <path/port/none> [subdomain] | ||||
| status = "usage: telebit status | ||||
| 
 | ||||
| 'telebit status' shows details about the current connections (or lack thereof). | ||||
| 
 | ||||
| @ -135,7 +135,7 @@ usage: telebit http <path/port/none> [subdomain] | ||||
| 
 | ||||
| Use cases: | ||||
| 
 | ||||
|         - Lazy man's AirDrop (works or lazy women too!) | ||||
|         - Lazy man's AirDrop (works for lazy women too!) | ||||
|         - Testing dev sites on a phone | ||||
|         - Sharing indie music and movies with friends" | ||||
| 
 | ||||
| @ -145,7 +145,7 @@ usage: telebit ssh <auto|port|none> | ||||
| 
 | ||||
| All https traffic will be inspected to see if it looks like ssh Once enabled all traffic that looks | ||||
| 
 | ||||
|         ssh auto                        Make ssh Just Works™ (on port 22) | ||||
|         ssh auto                        Make ssh Just Work™ (on port 22) | ||||
| 
 | ||||
|         ssh <port>                      forward ssh traffic to non-standard port | ||||
|         ex: telebit ssh 22              ex: explicitly forward ssh-looking packets to localhost:22 | ||||
| @ -452,5 +452,42 @@ The secret flags are: | ||||
| [remote] | ||||
| version = "telebit remote v{version}" | ||||
| 
 | ||||
| code = " | ||||
| ============================================== | ||||
|                  Hey, Listen! | ||||
| ============================================== | ||||
| 
 | ||||
|   GO CHECK YOUR EMAIL! | ||||
| 
 | ||||
|   DEVICE PAIR CODE:     0000 | ||||
| 
 | ||||
| ============================================== | ||||
| " | ||||
| 
 | ||||
| waiting = "waiting for you to check your email..." | ||||
| 
 | ||||
| success = "Success" | ||||
| 
 | ||||
| next_steps = "Some fun things to try first: | ||||
| 
 | ||||
|     ~/telebit http ~/Public | ||||
|     ~/telebit tcp 5050 | ||||
|     ~/telebit ssh auto | ||||
| 
 | ||||
| Press any key to continue... | ||||
| " | ||||
| 
 | ||||
| [remote.setup] | ||||
| 
 | ||||
| email = "Welcome! | ||||
| 
 | ||||
| By using Telebit you agree to: | ||||
| 
 | ||||
|       [x] Accept the Telebit™ terms of service | ||||
|       [x] Accept the Let's Encrypt™ terms of service | ||||
| 
 | ||||
| Enter your email to agree and login/create your account: | ||||
| " | ||||
| 
 | ||||
| [daemon] | ||||
| version = "telebit daemon v{version}" | ||||
|  | ||||
| @ -51,18 +51,24 @@ | ||||
| 
 | ||||
|     <div> | ||||
|       <h2>You've claimed <span class="js-servername">{{servername}}</span></h2> | ||||
|       <p>Here's some ways you can use it:</p> | ||||
|       <p>Here are some ways you can use Telebit via Terminal or other Command Line Interface:</p> | ||||
|       <div class="code-block"> | ||||
|         <pre><code>telebit http ~/Public            # serve a public folder | ||||
| telebit http 3000                # forward all https traffic to localhost:3000 | ||||
| telebit http none                # remove all https handlers</code></pre> | ||||
| 	      <br /> | ||||
|         <pre><code>~/telebit ssh auto            # allows you to connect to your computer with <br />                                ssh-over-https from a different computer</span></code></pre> | ||||
|         <pre><code>~/telebit http ~/Public            # serve a public folder | ||||
| ~/telebit http 3000                # forward all https traffic to localhost:3000 | ||||
| ~/telebit http none                # remove all https handlers</code></pre> | ||||
|       </div> | ||||
|     </div> | ||||
|     <p>You can <em>always</em> tunnel <strong>SSH over HTTPS</strong>, | ||||
|     <p>And remember you can <em>always</em> tunnel <strong>SSH over HTTPS</strong>, | ||||
|       even while you're using it for something else:</p> | ||||
|       <div class="code-block"><pre><code>telebit ssh auto</code></pre> | ||||
|   <p> </p> | ||||
|    | ||||
|     <details> | ||||
|     <p><summary><strong>Here are some examples for those of you that want to access files and folders remotely.  </strong></summary></p> | ||||
|     <p><strong>This function allows you to connect one computer to another computer you also have SSH on.</strong></p> | ||||
|       <div class="code-block"><pre><code>~/telebit ssh <span class="js-servername">{{servername}}</span></code></pre> | ||||
|       	<br> | ||||
| 				<pre><code>telebit ssh <span class="js-servername">{{servername}}</span></code></pre> | ||||
|     		- or - | ||||
|     		<pre><code>ssh -o ProxyCommand='<a href="https://telebit.cloud/sclient">sclient</a> %h' <span class="js-servername">{{servername}}</span></code></pre> | ||||
|     		- or - | ||||
| @ -70,8 +76,7 @@ telebit http none                # remove all https handlers</code></pre> | ||||
| ssh -o ProxyCommand="$proxy_cmd" <span class="js-servername">{{servername}}</span></code></pre> | ||||
| 			</div> | ||||
|     <pre><code>ssh -o ProxyCommand='openssl s_client -connect %h:443 -servername %h -quiet' <span class="js-servername">{{servername}}</span></code></pre> | ||||
| 
 | ||||
| 
 | ||||
|     </details> | ||||
|     <!--div class="js-port" hidden> | ||||
|       <h2>You've claimed port <span class="js-serviceport">{{serviceport}}</span></h2> | ||||
|       <p>Here's some ways you can use it:</p> | ||||
|  | ||||
| @ -3,7 +3,7 @@ | ||||
| 
 | ||||
| document.body.hidden = false; | ||||
| 
 | ||||
| var hash = window.location.hash.substr(1); | ||||
| var hash = window.location.hash.replace(/^[\/#?]+/, ''); | ||||
| var query = window.location.search; | ||||
| 
 | ||||
| function parseQuery(search) { | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "telebit", | ||||
|   "version": "0.20.5", | ||||
|   "version": "0.20.251025", | ||||
|   "description": "Break out of localhost. Connect to any device from anywhere over any tcp port or securely in a browser. A secure tunnel. A poor man's reverse VPN.", | ||||
|   "main": "lib/remote.js", | ||||
|   "files": [ | ||||
|  | ||||
| @ -34,9 +34,9 @@ ExecReload=/bin/kill -USR1 $MAINPID | ||||
| # Use private /tmp and /var/tmp, which are discarded after this stops. | ||||
| PrivateTmp=true | ||||
| # Use a minimal /dev | ||||
| ;PrivateDevices=true | ||||
| PrivateDevices=true | ||||
| # Hide /home, /root, and /run/user. Nobody will steal your SSH-keys. | ||||
| ProtectHome=true | ||||
| ;ProtectHome=true | ||||
| # Make /usr, /boot, /etc and possibly some more folders read-only. | ||||
| ProtectSystem=full | ||||
| # ... except for a few because we want a place for config, logs, etc | ||||
| @ -61,4 +61,5 @@ NoNewPrivileges=true | ||||
| ; NoNewPrivileges=true | ||||
| 
 | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| # For userspace service | ||||
| WantedBy=default.target | ||||
|  | ||||
| @ -62,6 +62,6 @@ NoNewPrivileges=true | ||||
| 
 | ||||
| [Install] | ||||
| # For system-level service | ||||
| ;WantedBy=multi-user.target | ||||
| WantedBy=multi-user.target | ||||
| # For userspace service | ||||
| WantedBy=default.target | ||||
| ;WantedBy=default.target | ||||
|  | ||||
| @ -114,8 +114,8 @@ Launcher.install = function (things, fn) { | ||||
|   }; | ||||
|   vars.telebitBinTpl = path.join(telebitRoot, 'usr/share/dist/bin/telebit.tpl'); | ||||
|   vars.telebitNpm = path.resolve(vars.telebitNode, '../npm'); | ||||
|   vars.nodePath = path.resolve(vars.telebitNode, '../lib/node_modules'); | ||||
|   vars.npmConfigPrefix = path.resolve(vars.telebitNode, '..'); | ||||
|   vars.nodePath = path.resolve(vars.telebitNode, '../../lib/node_modules'); | ||||
|   vars.npmConfigPrefix = path.resolve(vars.telebitNode, '..', '..'); | ||||
|   vars.userspace = (!things.telebitUser || (things.telebitUser === os.userInfo().username)) ? true : false; | ||||
|   if (-1 === vars.telebitRwDirs.indexOf(vars.npmConfigPrefix)) { | ||||
|     vars.telebitRwDirs.push(vars.npmConfigPrefix); | ||||
|  | ||||
| @ -133,8 +133,11 @@ my_tmp="$(mktemp -d -t telebit.XXXXXXXX)" | ||||
| #TELEBIT_TMP="$my_tmp/telebit" | ||||
| 
 | ||||
| echo "Installing $my_name to '$TELEBIT_REAL_PATH'" | ||||
| # v10.2+ has much needed networking fixes, but breaks ursa. v9.x has severe networking bugs. v8.x has working ursa, but requires tls workarounds" | ||||
| NODEJS_VER="${NODEJS_VER:-v10.6}" | ||||
| # v10.2+ has much needed networking fixes, but breaks ursa. | ||||
| # v9.x has severe networking bugs. | ||||
| # v8.x has working ursa, but requires tls workarounds" | ||||
| # v10.13 seems to work for me locally (new greenlock) | ||||
| NODEJS_VER="${NODEJS_VER:-v10.13}" | ||||
| export NODEJS_VER | ||||
| export NODE_PATH="$TELEBIT_TMP/lib/node_modules" | ||||
| export NPM_CONFIG_PREFIX="$TELEBIT_TMP" | ||||
| @ -224,16 +227,20 @@ pushd $TELEBIT_TMP >/dev/null | ||||
|   else | ||||
|     echo -n "." | ||||
|   fi | ||||
|   set +e | ||||
|   $tmp_npm install >/dev/null 2>/dev/null & | ||||
|   # ursa is now an entirely optional dependency for key generation | ||||
|   # but very much needed on ARM devices | ||||
|   $tmp_npm install ursa >/dev/null 2>/dev/null & | ||||
|   tmp_npm_pid=$! | ||||
|   while [ -n "$tmp_npm_pid" ]; do | ||||
|     sleep 2 | ||||
|     echo -n "." | ||||
|     kill -s 0 $tmp_npm_pid >/dev/null 2>/dev/null || tmp_npm_pid="" | ||||
|   done | ||||
|   set -e | ||||
|   echo -n "." | ||||
|   $tmp_npm install >/dev/null 2>/dev/null | ||||
|   # ursa is now an entirely optional dependency for key generation | ||||
|   # but very much needed on ARM devices | ||||
|   $tmp_npm install ursa >/dev/null 2>/dev/null || true | ||||
| popd >/dev/null | ||||
| 
 | ||||
| if [ -n "${TELEBIT_DEBUG}" ]; then | ||||
| @ -425,8 +432,8 @@ if [ -d "/Library/LaunchDaemons" ]; then | ||||
| 
 | ||||
|     if [ -n "${TELEBIT_DEBUG}" ]; then | ||||
|       echo "    > launchctl unload -w $my_app_launchd_service >/dev/null 2>/dev/null" | ||||
|       launchctl unload -w "$my_app_launchd_service" >/dev/null 2>/dev/null | ||||
|     fi | ||||
|     launchctl unload -w "$my_app_launchd_service" >/dev/null 2>/dev/null | ||||
|   else | ||||
|     my_app_launchd_service_skel="usr/share/dist/Library/LaunchDaemons/${my_app_pkg_name}.plist" | ||||
|     my_app_launchd_service="$my_root/Library/LaunchDaemons/${my_app_pkg_name}.plist" | ||||
| @ -489,23 +496,30 @@ elif [ "systemd" == "$my_system_launcher" ]; then | ||||
|     else | ||||
|       echo -n "." | ||||
|     fi | ||||
|     systemctl --user daemon-reload | ||||
|     # enable also puts success output to stderr... why? | ||||
|     systemctl --user enable $my_app >/dev/null 2>/dev/null | ||||
|     #echo "    > systemctl --user enable systemd-tmpfiles-setup.service systemd-tmpfiles-clean.timer" | ||||
|     #systemctl --user enable systemd-tmpfiles-setup.service systemd-tmpfiles-clean.timer | ||||
|     if [ -n "${TELEBIT_DEBUG}" ]; then | ||||
|       echo "    > systemctl --user start $my_app" | ||||
|     fi | ||||
|     systemctl --user stop $my_app >/dev/null 2>/dev/null | ||||
|     systemctl --user start $my_app >/dev/null | ||||
|     sleep 2; # give it time to start | ||||
|     _is_running=$(systemctl --user status --no-pager $my_app 2>/dev/null | grep "active.*running") | ||||
|     if [ -z "$_is_running" ]; then | ||||
|       echo "Something went wrong:" | ||||
|       systemctl --user status --no-pager $my_app | ||||
|       exit 1 | ||||
|     set +e | ||||
|     if systemctl --user daemon-reload; then | ||||
|       # enable also puts success output to stderr... why? | ||||
|       systemctl --user enable $my_app >/dev/null 2>/dev/null | ||||
|       #echo "    > systemctl --user enable systemd-tmpfiles-setup.service systemd-tmpfiles-clean.timer" | ||||
|       #systemctl --user enable systemd-tmpfiles-setup.service systemd-tmpfiles-clean.timer | ||||
|       if [ -n "${TELEBIT_DEBUG}" ]; then | ||||
|         echo "    > systemctl --user start $my_app" | ||||
|       fi | ||||
|       systemctl --user stop $my_app >/dev/null 2>/dev/null | ||||
|       systemctl --user start $my_app >/dev/null | ||||
| 
 | ||||
|       sleep 2; # give it time to start | ||||
|       _is_running=$(systemctl --user status --no-pager $my_app 2>/dev/null | grep "active.*running") | ||||
|       if [ -z "$_is_running" ]; then | ||||
|         echo "Something went wrong:" | ||||
|         systemctl --user status --no-pager $my_app | ||||
|       fi | ||||
|     else | ||||
|       echo "libpam-systemd is missing, which is required on Linux to register Telebit with the user launcher." | ||||
|       echo "sudo apt-get install -y libpam-systemd" | ||||
|       sudo apt-get install -y libpam-systemd | ||||
|     fi | ||||
|     set -e | ||||
|     echo -n "." | ||||
|   else | ||||
| 
 | ||||
|  | ||||
| @ -79,8 +79,8 @@ function run() { | ||||
|     , TELEBIT_LOG_DIR: process.env.TELEBIT_LOG_DIR || path.join(os.homedir(), '.local/share/telebit/var/log') | ||||
|     }; | ||||
|     vars.telebitNpm = process.env.TELEBIT_NPM || path.resolve(vars.telebitNode, '../npm'); | ||||
|     vars.nodePath = process.env.NODE_PATH || path.resolve(vars.telebitNode, '../lib/node_modules'); | ||||
|     vars.npmConfigPrefix = process.env.NPM_CONFIG_PREFIX || path.resolve(vars.telebitNode, '..'); | ||||
|     vars.nodePath = process.env.NODE_PATH || path.resolve(vars.telebitNode, '../../lib/node_modules'); | ||||
|     vars.npmConfigPrefix = process.env.NPM_CONFIG_PREFIX || path.resolve(vars.telebitNode, '..', '..'); | ||||
|     if (-1 === vars.telebitRwDirs.indexOf(vars.npmConfigPrefix)) { | ||||
|       vars.telebitRwDirs.push(vars.npmConfigPrefix); | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user