@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator

Use "LogLevel=ERROR" to try to improve "ssh" hostkey behavior without doing anything extreme/hacky

Summary:
Ref T13121. When you connect to a host with SSH, don't already know the host key, and don't have strict host key checking, it prints "Permanently adding host X to known hosts". This is super un-useful.

In a perfect world, we'd probably always have strict host key checking, but this is a significant barrier to configuration/setup and I think not hugely important (MITM attacks against SSH hosts are hard/rare and probably not hugely valuable). I'd imagine a more realistic long term approach is likely optional host key checking.

For now, try using `LogLevel=ERROR` instead of `LogLevel=quiet` to suppress this error. This should be strictly better (since at least some messages we want to see are ERROR or better), although it may not be perfect (there may be other INFO messages we would still like to see).

Test Plan:
- Ran `ssh -o LogLevel=... -o 'StrictHostKeyChecking=no' -o 'UserKnownHostsFile=/dev/null'` with bad credentials, for "ERROR", "quiet", and default ("INFO") log levels.
- With `INFO`, got a warning about adding the key, then an error about bad credentials (bad: don't want the key warning).
- With `quiet`, got nothing (bad: we want the credential error).
- With `ERROR`, got no warning but did get an error (good!).

Not sure this always gives us exactly what we want, but it seems like an improvement over "quiet".

Reviewers: amckinley

Reviewed By: amckinley

Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam

Maniphest Tasks: T13121

Differential Revision: https://secure.phabricator.com/D20240

+6 -3
+2 -2
src/applications/diffusion/ssh/DiffusionSSHWorkflow.php
··· 127 127 // This is suppressing "added <address> to the list of known hosts" 128 128 // messages, which are confusing and irrelevant when they arise from 129 129 // proxied requests. It might also be suppressing lots of useful errors, 130 - // of course. Ideally, we would enforce host keys eventually. 130 + // of course. Ideally, we would enforce host keys eventually. See T13121. 131 131 $options[] = '-o'; 132 - $options[] = 'LogLevel=quiet'; 132 + $options[] = 'LogLevel=ERROR'; 133 133 134 134 // NOTE: We prefix the command with "@username", which the far end of the 135 135 // connection will parse in order to act as the specified user. This
+4 -1
src/applications/drydock/interface/command/DrydockSSHCommandInterface.php
··· 30 30 $full_command = call_user_func_array('csprintf', $argv); 31 31 32 32 $flags = array(); 33 + 34 + // See T13121. Attempt to suppress the "Permanently added X to list of 35 + // known hosts" message without suppressing anything important. 33 36 $flags[] = '-o'; 34 - $flags[] = 'LogLevel=quiet'; 37 + $flags[] = 'LogLevel=ERROR'; 35 38 36 39 $flags[] = '-o'; 37 40 $flags[] = 'StrictHostKeyChecking=no';