[ 
https://issues.apache.org/jira/browse/SSHD-850?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16653046#comment-16653046
 ] 

Thomas Wolf commented on SSHD-850:
----------------------------------

I know the two are different, and one (keyboard-interactive auth) is handled 
fine by sshd. The other (passphrases for encrypted private keys) isn't.

Your proposed work-around for the missing functionality (implement my own 
{{KeyPairProvider}} that does this) implies that this special 
{{KeyPairProvider}} cannot use {{SecurityUtils.loadKeyPairIdentity()}}. It even 
looks I'd have to implement a whole separate hierarchy of 
{{KeyPairResourceParser}}s just to get something that in {{extractKeyPairs}} 
loops the required number of times, since outside of that it is not known 
whether a failure to read a key was due to a wrong password or some other 
problem. It also looks to me that I'd need a stateful {{FilePasswordProvider}} 
that remembers if it had been called at all for the key so that I can query it 
– if it hasn't even been called by the key parser, the key wasn't encrypted (or 
had a problem before we even got to decrypting it) and re-trying would be 
futile. (Outside of {{extractKeyPairs}} it isn't even known whether the key is 
encrypted at all.)

The fact that I'd have to side-step or re-implement quite a lot of the sshd 
default behavior is to me an indication that something is missing here in sshd.

> sshd client; encrypted private key identity file: FilePasswordProvider called 
> only once; should be called NumberOfPasswordPrompts times
> ---------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SSHD-850
>                 URL: https://issues.apache.org/jira/browse/SSHD-850
>             Project: MINA SSHD
>          Issue Type: Improvement
>    Affects Versions: 2.0.0
>            Reporter: Thomas Wolf
>            Priority: Minor
>
> In openssh, the ssh config entry NumberOfPasswordPrompts controls the number 
> of times the ssh client keeps asking for a password if the one entered was 
> invalid in two cases:
>  # keyboard-interactive authentication, and
>  # asking for passwords for encrypted private keys in identity files in 
> pubkey authentication (see [openssh sources; 
> sshconnect2.c|https://github.com/openssh/openssh-portable/blob/1a4a9cf/sshconnect2.c#L1380]).
> sshd-core only has support for (1) through setting the property 
> {{ClientAuthenticationManager.PASSWORD_PROMPTS}} in the session's properties.
> There doesn't seem to be any support for FilePasswordProvider to make it 
> respect this value.
> {{AbstractPEMResourceKeyPairParser.extractkeyPairs()}} and also 
> {{BouncyCastleKeyPairResourceParser.loadKeyPair()}} call 
> {{FilePasswordProvider.getPassword()}} exactly once.
> So how can I write a ssh client using sshd that asks the user 
> NumberOfPasswordPrompts times? Either I'm missing something, or there is some 
> support for this missing in sshd.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to