How to specify chost (client hostname) used for hostbased authentication?

Brian Candler b.candler at pobox.com
Fri Sep 5 20:04:10 AEST 2025


On 05/09/2025 10:45, Jan Schermer wrote:
> I am not that familiar with HostbasedAuthentication, or rather how it 
> was/is actually used and what the background is.

There's a reasonable overview here:

https://hea-www.harvard.edu/~fine/Tech/ssh-host-based.html

Basically it's to get rssh-like functionality between a local cluster of 
machines that trust each other.  A user logged in as "foo" on machine A 
can ssh into account "foo" on machine B. But instead of user foo having 
their own personal key pair, there's a key pair between the hosts 
themselves.

Hence all users on machine A can login as the corresponding user on 
machine B: convenient in some environments, but not very secure.  
Generally to be avoided unless you have a good reason to use it.  If 
you're on a dynamic IP address you probably want to do normal user 
pubkey authentication, not host authentication.

> To me, the whole thing with SSHKeySign looks like the server could 
> actually SSH back to the client(’s server), have the server 
> sign/verify it (sort of out-of-band) and then accept/reject the 
> original authentication, not sure if something like that is behind 
> this design or not but that’s why my thoughts went for verifying the 
> hostname by forward DNS lookup…

Sorry, I don't understand that at all.

With host-based authentication, host A is connecting to host B. Host B 
has a "known_hosts" entry for host A, which contains the public key 
corresponding to host A's private key.  Once host A has proved its 
identify (via ssh-keysign to prove it has the private key), host B 
accepts the connection. It then trusts host A to assert which username 
is logging in (whether that be "foo" or "bar" or "root")

I don't see why host B would also want to SSH back to host A as part of 
A logging into B. In that case, host A would also have to allow ssh 
connections from host B. Sounds like a chicken-and-egg situation.

The DNS is not really part of the authentication, except in as much as 
host B needs to know who is trying to authenticate, so that it can 
select the correct public key from its known_hosts file. This can be 
done either by:

- host B doing a reverse DNS lookup on the source IP address of the TCP 
connection

- host A sending its own identity "hostA" as the chost field in the 
authentication exchange

But in either case, it's only selecting a *candidate* for 
authentication. If hostA cannot actually *prove* that it is hostA, which 
it does by signing a challenge using hostA's private key, then 
authentication will fail.  So DNS is not really part of the security, 
any more that when I type "ssh brian at 1.2.3.4" I am *claiming* that I am 
user "brian" but won't get any further without a successful authentication.



More information about the openssh-unix-dev mailing list