On Thu, 23 Jan 2020, Damien Miller wrote:
> On Wed, 22 Jan 2020, Stuart Henderson wrote:
>
> > On 2020/01/21 15:39, Damien Miller wrote:
> > > CVSROOT: /cvs
> > > Module name: src
> > > Changes by: [email protected] 2020/01/21 15:39:57
> > >
> > > Modified files:
> > > usr.bin/ssh : sshd.c
> > >
> > > Log message:
> > > expose the number of currently-authenticating connections
> > > along with the MaxStartups limit in the proctitle;
> > > suggestion from Philipp Marek, w/ feedback from Craig Miskell
> > > ok dtucker@
> > >
> >
> > It's nice to have this information visible, but it brings some problems.
> > You can't now distinguish between multiple sshd processes (e.g. if you
> > run several on different ports it's hard to figure out which one to
> > signal if needed).
>
> How could you discern between different sshd processes before? Just the
> command-line args?
>
> What information would you like there? We could put the first N listen
> addrs in the proctitle if that would help.
Maybe like this:
63817 ?? S 0:00.05 sshd: [listen] on [0.0.0.0]:22, [::]:22, 0 of 10-100
ok?
diff --git a/sshd.c b/sshd.c
index ec644c9..15014d1 100644
--- a/sshd.c
+++ b/sshd.c
@@ -240,6 +240,9 @@ void destroy_sensitive_data(void);
void demote_sensitive_data(void);
static void do_ssh2_kex(struct ssh *);
+/* Listen info for proctitle */
+static char *proctitle_listen_addr;
+
/*
* Close all listening sockets
*/
@@ -913,7 +916,7 @@ listen_on_addrs(struct listenaddr *la)
{
int ret, listen_sock;
struct addrinfo *ai;
- char ntop[NI_MAXHOST], strport[NI_MAXSERV];
+ char *cp, ntop[NI_MAXHOST], strport[NI_MAXSERV];
for (ai = la->addrs; ai; ai = ai->ai_next) {
if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
@@ -973,6 +976,15 @@ listen_on_addrs(struct listenaddr *la)
ntop, strport,
la->rdomain == NULL ? "" : " rdomain ",
la->rdomain == NULL ? "" : la->rdomain);
+ if (num_listen_socks < 3) {
+ cp = proctitle_listen_addr;
+ xasprintf(&proctitle_listen_addr, "%s%s[%s]:%s%s%s",
+ cp == NULL ? "" : cp, cp == NULL ? "" : ", ",
+ ntop, strport,
+ la->rdomain == NULL ? "" : " rdomain ",
+ la->rdomain == NULL ? "" : la->rdomain);
+ free(cp);
+ }
}
}
@@ -1030,7 +1042,9 @@ server_accept_loop(int *sock_in, int *sock_out, int
*newsock, int *config_s)
*/
for (;;) {
if (ostartups != startups) {
- setproctitle("[listener] %d of %d-%d startups",
+ setproctitle("[listen] on %s%s, "
+ "%d of %d-%d startups", proctitle_listen_addr,
+ num_listen_socks > 3 ? " [...]" : "",
startups, options.max_startups_begin,
options.max_startups);
ostartups = startups;