Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

169 Commits
169 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pigeons

Crates.io Documentation License

SSH to any machine without an IP address, behind a NAT/firewall without port forwarding or VPN setup.

# on the server
> pigeons roost
roost is running! id: bb8e1a5661a6dfa9ae2dd978922f30f524f6fd8c99b3de021c53f292aae74330

# on the client — add a route, then ssh as normal
> pigeons add --id bb8e1a5661a6dfa9ae2dd978922f30f524f6fd8c99b3de021c53f292aae74330 --name my-server
> ssh user@my-server

That's it. (requires ssh/sshd to be installed)


Installation

Download the binary for your operating system from GitHub Releases, or use our bash one-liner:

curl -fSsL https://vorc.s3.us-east-2.amazonaws.com/pigeons-install.sh | bash

Quick Start

Server (roost)

Start a roost to accept incoming connections. Keys are persisted by default so the endpoint ID stays the same across restarts:

> pigeons roost
roost is running! id: bb8e1a5661a6dfa9ae2dd978922f30f524f6fd8c99b3de021c53f292aae74330

Use --ephemeral for a throwaway identity, or --ssh-port if sshd is on a non-standard port:

> pigeons roost --ephemeral --ssh-port 2222

Client

The easiest way to connect is to add a pigeon route, which creates an SSH config entry:

> pigeons add --id bb8e1a5661a6dfa9ae2dd978922f30f524f6fd8c99b3de021c53f292aae74330 --name my-server
Pigeon route 'my-server' added to ~/.ssh/config

Then connect with standard ssh:

> ssh user@my-server

Works through any firewall, NAT, or private network. No configuration needed.


Service Mode

Install pigeons as a system service for always-on access:

> pigeons service install                   # default SSH port 22
> pigeons service status                    # check if the service is running
> pigeons service log                       # view service logs
> pigeons service uninstall                 # remove the service

Supported on Linux (systemd), macOS (launchd), and Windows (SCM).


Route Management

# Add a route
> pigeons add --id <ENDPOINT_ID> --name my-server

# List configured routes
> pigeons list

# Remove a route
> pigeons remove my-server

How It Works

┌─────────────┐          ┌─────────────────┐          ┌─────────────┐
│     SSH     │─────────▶│  QUIC Tunnel    │─────────▶│   pigeons   │
│   Client    │          │  (P2P Network)  │          │    roost     │
└─────────────┘          └─────────────────┘          └─────────────┘
      │                           ▲                            │
      │                           │                            │
      ▼                           │                            ▼
┌─────────────┐          ┌─────────────────┐          ┌──────────────────┐
│ ProxyCommand│          │   pigeons fly   │          │   SSH Server     │
│ pigeons fly │─────────▶│    --stdio      │          │  localhost:22    │
│   --stdio   │          │                 │          └──────────────────┘
└─────────────┘          └─────────────────┘
  1. SSH Client: Invokes pigeons fly --stdio via SSH's ProxyCommand
  2. Fly: Establishes QUIC connection through Iroh's P2P network (automatic NAT traversal)
  3. Roost: Accepts connection and proxies to local SSH daemon (port 22)
  4. Authentication: Standard SSH authentication end-to-end over encrypted QUIC tunnel

Commands

# Server
> pigeons roost                             # start a roost (persistent keys by default)
> pigeons roost --ephemeral                 # throwaway identity
> pigeons roost --ssh-port 2222             # custom SSH port

# Client
> pigeons fly <ENDPOINT_ID>                 # quick connect (binds local port)
> pigeons fly --stdio <ENDPOINT_ID>         # ProxyCommand mode (used by ssh config)
> pigeons add --id <ID> --name <NAME>       # add SSH config entry
> pigeons list                              # list pigeon routes
> pigeons remove <NAME>                     # remove SSH config entry

# Service
> pigeons service install                   # install as system service
> pigeons service install --ssh-port 2222   # with custom SSH port
> pigeons service status                    # check service status
> pigeons service log                       # view service logs
> pigeons service uninstall                 # remove service

Security Model

  • Endpoint ID access: Anyone with the Endpoint ID can reach your SSH port
  • SSH authentication: Standard SSH auth (keys, certificates, passwords) applies
  • Persistent keys: Uses dedicated .ssh/pigeons_ed25519 keypair
  • QUIC encryption: Transport layer encryption between endpoints

License

Licensed under either of Apache License 2.0 or MIT license at your option.

About

Carrier pigeons always find their way home.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.