aboutsummaryrefslogtreecommitdiffstats
path: root/doc/ssh_aliases_host_ip.txt
blob: e32e6a5e17f634b6248b5906b51a7e313f94b9ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

An important feature for ucp is to be able to use the same hostnames as SSH
(and thus scp). SSH allows hostname aliases defined in ~/.ssh/config, which
will resolve differently from other hostnames, so this is non-trivial. It's
also possible that the SSH connection is bounching through NAT or intermediate
SSH hops along the way, because the internet is broken, so it's even more
non-trivial.

One solution is to have users add identical aliases in /etc/hosts instead of
~/.ssh/config. Meh.

Another solution ("remote-report") would be to have the remote server return
the IP address which it has opened the uTP (UDP) socket on. The problem with
this is that the remote server might be behind NAT, in which case it's
perceived listening IP address would not be a legit globally routable IP.

Another solution ("local-resolve") is to punt and force folks to only use
globally-resolvable hostnames or numeric IP addresses on the command line.

Another solution ("proxy-command") is to do a weird tangled heirarchy thing
where SSH uses the ProxyCommand option to re-call the ucp executable itself
with the "full" hostname and port specified as additional arguments; ucp would
know what it needs to know internally, and re-call SSH without these options to
create the actual connection (?).

A great solution would be if there was a command for resolving SSH hostnames
(returning a "real" hostname), but I don't think such a thing exists.

A "manual-fallback" would be to allow the user to specify all the connect() and
bind() IP addresses and ports with command line flags.

scp doesn't have this problem because it's just using the SSH connection.

mosh is increasingly complicated and as of Spring 2016 allows several of the
above solutions with command line args.

The current proposed solution is to default to "remote-report" and have a flag
to the client command to use "local-resolve" instead.