Show localhost based SSH URLs
If the SSH daemon only accepts connections over localhost, its probably because its a testing installation for a developer. We still should make its SSH host keys and download URLs available in the UI to help the developer interact with their test instance. Previously I had hidden the localhost URLs because... I had no good reason. I'm pretty certain we used to expose addresses on the loopback, but then hid them because we wanted to prioritize a public URL first in the advertisements. Instead in this patch we still allow loopback URLs, but only if no public ones are found. Change-Id: I0ca20356b2d3a6eeed2fb4398e0429e489e26f18 Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
@@ -236,18 +236,9 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener {
|
|||||||
buf.putRawPublicKey(pub);
|
buf.putRawPublicKey(pub);
|
||||||
final byte[] keyBin = buf.getCompactData();
|
final byte[] keyBin = buf.getCompactData();
|
||||||
|
|
||||||
for (final SocketAddress addr : listen) {
|
for (final InetSocketAddress addr : myAddresses()) {
|
||||||
if (!(addr instanceof InetSocketAddress)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final InetSocketAddress inetAddr = (InetSocketAddress) addr;
|
|
||||||
if (inetAddr.getAddress().isLoopbackAddress()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
r.add(new HostKey(SocketUtil.format(inetAddr, IANA_SSH_PORT), keyBin));
|
r.add(new HostKey(SocketUtil.format(addr, IANA_SSH_PORT), keyBin));
|
||||||
} catch (JSchException e) {
|
} catch (JSchException e) {
|
||||||
log.warn("Cannot format SSHD host key", e);
|
log.warn("Cannot format SSHD host key", e);
|
||||||
}
|
}
|
||||||
@@ -256,6 +247,23 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener {
|
|||||||
return Collections.unmodifiableList(r);
|
return Collections.unmodifiableList(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<InetSocketAddress> myAddresses() {
|
||||||
|
ArrayList<InetSocketAddress> pub = new ArrayList<InetSocketAddress>();
|
||||||
|
ArrayList<InetSocketAddress> local = new ArrayList<InetSocketAddress>();
|
||||||
|
|
||||||
|
for (final SocketAddress addr : listen) {
|
||||||
|
if (addr instanceof InetSocketAddress) {
|
||||||
|
final InetSocketAddress inetAddr = (InetSocketAddress) addr;
|
||||||
|
if (inetAddr.getAddress().isLoopbackAddress()) {
|
||||||
|
local.add(inetAddr);
|
||||||
|
} else {
|
||||||
|
pub.add(inetAddr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pub.isEmpty() ? local : pub;
|
||||||
|
}
|
||||||
|
|
||||||
private List<PublicKey> myHostKeys() {
|
private List<PublicKey> myHostKeys() {
|
||||||
final KeyPairProvider p = getKeyPairProvider();
|
final KeyPairProvider p = getKeyPairProvider();
|
||||||
final List<PublicKey> keys = new ArrayList<PublicKey>(2);
|
final List<PublicKey> keys = new ArrayList<PublicKey>(2);
|
||||||
|
Reference in New Issue
Block a user