aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ssh/src
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2018-02-21 15:09:47 +0100
committerErlang/OTP <[email protected]>2018-02-21 15:09:47 +0100
commit3024332c70e90eb0a6ee07eebc09647a4160a5b3 (patch)
tree58b2461ecb66226a27190a3517375762cba3db81 /lib/ssh/src
parenta17e29513b992afe82d7cdfdd3c880158ad0d80a (diff)
parented01a9d3f2614933d05e7d85b4bb3568c4e04cdb (diff)
downloadotp-3024332c70e90eb0a6ee07eebc09647a4160a5b3.tar.gz
otp-3024332c70e90eb0a6ee07eebc09647a4160a5b3.tar.bz2
otp-3024332c70e90eb0a6ee07eebc09647a4160a5b3.zip
Merge branch 'hans/ssh/limit_knownhosts/OTP-14935' into maint-20
* hans/ssh/limit_knownhosts/OTP-14935: ssh: Add option save_accepted_host
Diffstat (limited to 'lib/ssh/src')
-rw-r--r--lib/ssh/src/ssh_options.erl6
-rw-r--r--lib/ssh/src/ssh_transport.erl5
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/ssh/src/ssh_options.erl b/lib/ssh/src/ssh_options.erl
index 68c99743ee..cf1534bd78 100644
--- a/lib/ssh/src/ssh_options.erl
+++ b/lib/ssh/src/ssh_options.erl
@@ -439,6 +439,12 @@ default(client) ->
class => user_options
},
+ {save_accepted_host, def} =>
+ #{default => true,
+ chk => fun erlang:is_boolean/1,
+ class => user_options
+ },
+
{pref_public_key_algs, def} =>
#{default => ssh_transport:default_algorithms(public_key),
chk => fun check_pref_public_key_algs/1,
diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl
index 154894cda8..a7f4854b4b 100644
--- a/lib/ssh/src/ssh_transport.erl
+++ b/lib/ssh/src/ssh_transport.erl
@@ -889,10 +889,13 @@ known_host_key(#ssh{opts = Opts, key_cb = {KeyCb,KeyCbOpts}, peer = {PeerName,_}
{_,true} ->
ok;
{_,false} ->
+ DoAdd = ?GET_OPT(save_accepted_host, Opts),
case accepted_host(Ssh, PeerName, Public, Opts) of
- true ->
+ true when DoAdd == true ->
{_,R} = add_host_key(KeyCb, PeerName, Public, [{key_cb_private,KeyCbOpts}|UserOpts]),
R;
+ true when DoAdd == false ->
+ ok;
false ->
{error, rejected_by_user};
{error,E} ->