[PATCH] ssh-add: support parser-friendly operation

Corey Hickey bugfood-ml at fatooh.org
Sat Jan 11 04:27:07 AEDT 2025


On 2025-01-10 01:35, Jochen Bern wrote:
> On 10.01.25 00:33, Corey Hickey wrote:
>> I took the approach of preserving current behavior by default, but
>> another approach would be to:
>> * print "The agent has no identities." to stderr instead of stdout
>> * exit with a status of 0 instead of 1
> 
> Please don't. If you want to ever get people to load their privkeys into
> the agent *with a limited lifetime*, having a trivial, *universal* way
> to check whether they have expired by now is an asset.
> 
>> workplace$ egrep ' ssh(|add)=' .bashrc
>> alias sshadd='( echo -n "`tput dim`" ; ssh-add -c -t 1800 ; echo -n "`tput sgr0`" )'
>> alias ssh='ssh-add -l >/dev/null || sshadd ; ssh'

With my patch v2, that would need to be:

 > alias ssh='ssh-add -l | grep -q . || sshadd ; ssh'

...though the message "The agent has no identities." would be printed to 
stderr, for better or for worse. Perhaps that should require a higher 
log_level (via -v).


I can definitely see that there can be potential harm in changing 
default behavior, if people are relying on the current behavior. That's 
why my first patch did not change the default.

That said, I do think the current behavior is not optimal. In a general 
sense, when listing something, an empty list is a valid outcome. If the 
listing tool returns an error status after _successfully_ determining 
that the list is empty, then the caller cannot easily know whether the 
tool succeeded or was unable to determine the list.

For some precedence:

$ mkdir x ; ls x ; echo "ls: $?" ; find x -mindepth 1 ; echo "find: $?"
ls: 0
find: 0
$ awk '/foo/' /etc/passwd ; echo "awk: $?"
awk: 0
$ sed -n '/foo/p' /etc/passwd ; echo "sed: $?"
sed: 0


Of course, I can't say that all tools work this way. Here are a couple 
that do not:

$ ps -u games ; echo "ps: $?" ; grep foo /etc/passwd ; echo "grep: $?"
     PID TTY          TIME CMD
ps: 1
grep: 1

...but I do find it easier to work with listing-tools that consider an 
empty list to not be an error.


I can adjust and refine whichever approach the maintainers think is best.

Thanks,
Corey


More information about the openssh-unix-dev mailing list