[PATCH] ssh-keyscan also emits the port used for key retrieval, if non-default

Damien Miller djm at mindrot.org
Fri Apr 10 10:09:01 AEST 2015


On Thu, 9 Apr 2015, Michael Handler wrote:

> If you invoke ssh-keyscan with a non-default port via -p, it won't log
> that port data in the hostname portion of the key data it prints out.

Thanks, I committed a slightly different patch using the existing
put_host_port() function:

diff --git a/ssh-keyscan.c b/ssh-keyscan.c
index c5fb3b5..7955d72 100644
--- a/ssh-keyscan.c
+++ b/ssh-keyscan.c
@@ -299,15 +299,18 @@ static void
 keyprint(con *c, struct sshkey *key)
 {
 	char *host = c->c_output_name ? c->c_output_name : c->c_name;
+	char *hostport = NULL;
 
 	if (!key)
 		return;
 	if (hash_hosts && (host = host_hash(host, NULL, 0)) == NULL)
 		fatal("host_hash failed");
 
-	fprintf(stdout, "%s ", host);
+	hostport = put_host_port(host, ssh_port);
+	fprintf(stdout, "%s ", hostport);
 	sshkey_write(key, stdout);
 	fputs("\n", stdout);
+	free(hostport);
 }
 
 static int
@@ -488,7 +491,7 @@ congreet(int s)
 		confree(s);
 		return;
 	}
-	fprintf(stderr, "# %s %s\n", c->c_name, chop(buf));
+	fprintf(stderr, "# %s:%d %s\n", c->c_name, ssh_port, chop(buf));
 	n = snprintf(buf, sizeof buf, "SSH-%d.%d-OpenSSH-keyscan\r\n",
 	    c->c_keytype == KT_RSA1? PROTOCOL_MAJOR_1 : PROTOCOL_MAJOR_2,
 	    c->c_keytype == KT_RSA1? PROTOCOL_MINOR_1 : PROTOCOL_MINOR_2);



More information about the openssh-unix-dev mailing list