[Feature Request] Add (and check against) IP to known_hosts even when domain is used to connect

Joshua Dietz jospam at dietz-ulm.de
Wed Mar 25 02:23:37 AEDT 2020


Hello Bob and thank you for your reply,

first of all I hope that I'm answering in the right way since I had 
enabled the daily digest and I'm not sure if it's the right way to use 
Thunderbirds "Reply List" feature on this digest. If it's wrong this way 
I apologize. I turned of the daily digest so my next messages should be 
correct.

> Are you aware of HostKeyAlias?
Yes I read that but as far as I understand the feature is more like 
aliasing commands in linux (so i.e if I have a server which I use as 
webserver I could create the alias "webserver", configure the hostname, 
port etc. and then just use the alias "webserver" instead of typing the 
whole line with port etc. OpenSSH will then act as if I typed everything 
like it's saved in the alias configuration. So if I understood that 
right I don't really see how this helps me with my specific problem.

> Regardless of other things, for a set of servers I recommend using
> ssh-keyscan to pre-populate the known_hosts file.
Yea you're right. Currently my approach is far from perfect (I currently 
just rely that everything is correct when first connecting to a newly 
created server)

> but it isn't clear to me where you were thinking
> of those wildcards.
By wildcards I meant the feature to change the entry in known_hosts to 
*.mydomain.com which would match this hostkey to the ssh commands 
webserver.example.com, database.example.com etc.

> An example name or two to help us understand the type of naming you
> are using would help make this more concrete.
Sure, here you go (just a made-up example):

Imagine I have two servers, Server A has the ip AA.AA.AA.AA, Server B 
has the ip BB.BB.BB.BB

I have to following services running on A:

- Webserver for website 1

- Mailserver

- Database for the Website

And the following on B

- Some backend in node

- an gitlab instance

- gitlab database

- Webserver for website 2

Further I have the domain mydomain.com

Now I would create the following dns records:

webserver.mydomain.com A-Record with content AA.AA.AA.AA

mailserver.mydomain.com A-Record with content AA.AA.AA.AA

[...]

node-backend.mydomain.com A-Record with content BB.BB.BB.BB

gitlab.mydomain.com A-Record with content BB.BB.BB.BB

[...]

If I had to add another service I would install it on one of the servers 
and then I would create a respective record and from there on I could 
connect to the server running the service by using its respective dns 
name (i.e. if I'd like to ssh into the server running the mailserver I'd 
just type ssh username at mailserver.mydomain.com

Until now it sounds like something easy to accomplish with the Alias 
feature. *But* this has a few disadventages to me:

- It requires a client side configuration which would need to be synced 
between multiple clients (i.e. laptop, pc)

- It requires to make a change (and resync to all my devices) this 
config when I move a service to another server instead of just changing 
the DNS settings which are automatically in sync

- My end-goal goes even further (I left that out in the first mail 
because it makes everything sound way more complex but I'll try to 
explain it briefly now:)

What I really want to create in the end is something like this:

A service (probably web based). Let's say it has the domain 
myservice.net. At the beginning I want to use the service just for me, 
later users shall be able to create a subdomain on this service (for 
free), i.e. username.myservice.net.

Then they shall be able to add their servers (so it's ipv4 and/or ipv6 
ips) like they would add A and AAAA records in every normal DNS service. 
The special thing is that they can add a description for every server. 
This may be keywords or even a short text summarizing all services 
running on the server.

The special thing is a custom designed DNS server (which I already 
started to implement since I did not knew that known_hosts does not save 
the ip but instead the hostname to check a servers fingerprint).

This DNS server implements a feature that I'd call "search by DNS". I 
think I should explain it with the example from above.

So Imagine I created the subdomain joshua.myservice.net on the service

Then I'd add my servers A and B with its respective ip adresses 
AA.AA.AA.AA and BB.BB.BB.BB

For server A the description could look like this: "This server runs a 
webserver for website 1, a mailserver and the respective database for 
the website"

And server B's description could look like "This server runs the node 
backend, the gitlab instance, the respective database for gitlab and the 
webserver for website 2"

Now I want to be able to use all subdomains under joshua.myservice.net 
as a search-query which resolves to the respective server as soon as the 
search has exactly one result (this is what the custom DNS server 
implements)

So i.e. I could type ssh username at git-database.joshua.myservice.net

Since only the description of Server B contains the words "git" *and* 
"database" this is the only server matching the search term and so it's 
resolved to the IP of server B, BB.BB.BB.BB

*But* (and this is why I think wildcards and aliases are not suitable 
for this) the same search could also look like this:

database.gitlab.joshua.myservice.net OR gitlab-data.myservice.net and so 
on.

So there is an infinit number of hostnames for each server. Also since 
many users could use the service and it (or one of the servers) *could* 
be hacked I don't want to use a wildcard like *.joshua.myservice.net. 
(what I mean by wildcard is explained above) This would open an attack 
vector like described here (https://superuser.com/a/1328615/933511) 
(under heading "security caveat")

In my opinion a service like this could be really useful (at least for 
me) but I don't think that it would be usable if it opens up even a 
small attack vector or if it requires more then one small client-side 
configuration change.

So as far as I can see the only option to make this useful and keep it 
secure would be if there was an option like I described to add (and 
check) hostkeys by ip even if a hostname is used to connect.

Sorry for the long message, it's pretty hard for me to explain it in 
detail in english


Thank you for your time again

Kind regards

Joshua




More information about the openssh-unix-dev mailing list