p2p --link now defaults to setting up a bi-directional link

Both the local and remote git repositories get remotes added
pointing at one-another.

Makes pairing twice as easy!

Security: The new LINK command in the protocol can be sent repeatedly,
but only by a peer who has authenticated with us. So, it's entirely safe to
add a link back to that peer, or to some other peer it knows about.
Anything we receive over such a link, the peer could send us over the
current connection.

There is some risk of being flooded with LINKs, and adding too many
remotes. To guard against that, there's a hard cap on the number of remotes
that can be set up this way. This will only be a problem if setting up
large p2p networks that have exceptional interconnectedness.

A new, dedicated authtoken is created when sending LINK.

This also allows, in theory, using a p2p network like tor, to learn about
links on other networks, like telehash.

This commit was sponsored by Bruno BEAUFILS on Patreon.
This commit is contained in:
Joey Hess 2016-12-16 16:32:29 -04:00
parent e67a310da1
commit 3037feb1bf
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
7 changed files with 105 additions and 46 deletions

View file

@ -24,13 +24,16 @@ services.
* `--link`
Sets up a git remote that is accessed over a P2P network.
Sets up a link with a peer over the P2P network.
This will prompt for an address to be entered; you should paste in the
address that was generated by --gen-address in the remote repository.
Defaults to making the git remote be named "peer1", "peer2",
etc. This can be overridden with the `--name` option.
A git remote will be created, with a name like "peer1", "peer2"
by default (the `--name` option can be used to specify the name).
The link is bi-directional, so the peer will also have a git
remote added to it, linking back to the repository where this is run.
* `--name`

View file

@ -56,13 +56,13 @@ peer1 remote:
git annex sync --content peer1
You can also generate an address for this new peer, by running `git annex
p2p --gen-addresses`, and link other peers to that address using `git annex
p2p --link`. It's often useful to link peers up in both directions,
so peer1 is a remote of peer2 and peer2 is a remote of peer1.
Any number of peers can be connected this way, within reason.
(When the second peer links to it, the first peer also
gets a new remote added to it, which points to the second peer.
So, on the first peer, you can also sync with the second peer.
The name of the that remote will be "peer1", or "peer2", etc.)
## starting git-annex remotedaemon
Notice the `git annex remotedaemon` being run in the above examples.