Both issues are now fixed in master.

2014-09-22 19:08 GMT+02:00 George Sexton <[email protected]>:

> Is there a particular reason. DefaultSftpClient.write(path) doesn't add
> the option for OpenMode.Create?
>
> It seems like it should.
>
>
> On 9/22/2014 1:08 AM, Guillaume Nodet wrote:
>
>> Would you mind raising a JIRA for that ?
>> This is a bug, as the the Closeeable interface specifies "If the stream is
>> already closed then invoking this method has no effect."
>>
>> Cheers,
>> Guillaume
>>
>> 2014-09-22 4:18 GMT+02:00 George Sexton <[email protected]>:
>>
>>  On 9/20/2014 1:43 AM, Guillaume Nodet wrote:
>>>
>>>  Can you bypass the call to close() for now and see if the file has been
>>>> read correctly ?
>>>>
>>>>  I have discovered the issue. StreamUtils.streamToString() instantiates
>>> an
>>> InputStreamReader(), and then closes it on completion. Evidently this is
>>> closing the underlying input stream. When I make a subsequent call to
>>> InputStream.close(), it throws error 2, no such file.
>>>
>>> That's kind of misleading.
>>>
>>>
>>>   Also, and just fwiw, the client api can be used this way:
>>>
>>>> session.addPasswordIdentity(m_password);
>>>> session.auth().verify();
>>>> authenticated  =  true;
>>>>
>>>>
>>>> 2014-09-20 6:28 GMT+02:00 George Sexton <[email protected]>:
>>>>
>>>>   On 9/19/2014 5:30 PM, George Sexton wrote:
>>>>
>>>>>   I'm having a problem using SFTP Client. I'm getting no such file.
>>>>> I've
>>>>>
>>>>>> tried the relative path, and the absolute path. Here's the code:
>>>>>>
>>>>>>   And just to add a little more info, I've looked at the SftpClient
>>>>>> test
>>>>>>
>>>>> code and I'm not seeing it. I started sshd in debug mode and here's
>>>>> what
>>>>> I'm seeing below. The part I don't understand is it doesn't look like
>>>>> the
>>>>> SFTP client is actually sending anything to the back end. It opens the
>>>>> SFTP
>>>>> subsystem, and then there's nothing more.
>>>>>
>>>>> debug1: sshd version OpenSSH_6.1p1
>>>>> debug1: read PEM private key done: type RSA
>>>>> debug1: private host key: #0 type 1 RSA
>>>>> debug1: read PEM private key done: type DSA
>>>>> debug1: private host key: #1 type 2 DSA
>>>>> debug1: read PEM private key done: type ECDSA
>>>>> debug1: private host key: #2 type 3 ECDSA
>>>>> debug1: rexec_argv[0]='/usr/sbin/sshd'
>>>>> debug1: rexec_argv[1]='-d'
>>>>> debug1: rexec_argv[2]='-p'
>>>>> debug1: rexec_argv[3]='1234'
>>>>> Set /proc/self/oom_score_adj from -1000 to -1000
>>>>> debug1: Bind to port 1234 on 0.0.0.0.
>>>>> Server listening on 0.0.0.0 port 1234.
>>>>> debug1: Bind to port 1234 on ::.
>>>>> Server listening on :: port 1234.
>>>>> debug1: Server will not fork when running in debugging mode.
>>>>> debug1: rexec start in 5 out 5 newsock 5 pipe -1 sock 8
>>>>> debug1: inetd sockets after dupping: 3, 3
>>>>> Connection from xx.xx.xx.xx port 60808
>>>>> debug1: Client protocol version 2.0; client software version
>>>>> SSHD-CORE-0.12.1-SNAPSHOT
>>>>> debug1: no match: SSHD-CORE-0.12.1-SNAPSHOT
>>>>> debug1: Enabling compatibility mode for protocol 2.0
>>>>> debug1: Local version string SSH-2.0-OpenSSH_6.1
>>>>> debug1: permanently_set_uid: 71/65 [preauth]
>>>>> debug1: list_hostkey_types: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256
>>>>> [preauth]
>>>>> debug1: SSH2_MSG_KEXINIT sent [preauth]
>>>>> debug1: SSH2_MSG_KEXINIT received [preauth]
>>>>> debug1: kex: client->server aes128-ctr hmac-sha2-256 none [preauth]
>>>>> debug1: kex: server->client aes128-ctr hmac-sha2-256 none [preauth]
>>>>> debug1: SSH2_MSG_KEX_DH_GEX_REQUEST received [preauth]
>>>>> debug1: SSH2_MSG_KEX_DH_GEX_GROUP sent [preauth]
>>>>> debug1: expecting SSH2_MSG_KEX_DH_GEX_INIT [preauth]
>>>>> debug1: SSH2_MSG_KEX_DH_GEX_REPLY sent [preauth]
>>>>> debug1: SSH2_MSG_NEWKEYS sent [preauth]
>>>>> debug1: expecting SSH2_MSG_NEWKEYS [preauth]
>>>>> debug1: SSH2_MSG_NEWKEYS received [preauth]
>>>>> debug1: KEX done [preauth]
>>>>> debug1: userauth-request for user ft service ssh-connection method
>>>>> keyboard-interactive [preauth]
>>>>> debug1: attempt 0 failures 0 [preauth]
>>>>> debug1: PAM: initializing for "ft"
>>>>> debug1: PAM: setting PAM_RHOST to "c-67-166-23-167.hsd1.co.comcast.net
>>>>> "
>>>>> debug1: PAM: setting PAM_TTY to "ssh"
>>>>> debug1: keyboard-interactive devs  [preauth]
>>>>> debug1: auth2_challenge: user=ft devs= [preauth]
>>>>> debug1: kbdint_alloc: devices 'pam' [preauth]
>>>>> debug1: auth2_challenge_start: trying authentication method 'pam'
>>>>> [preauth]
>>>>> Postponed keyboard-interactive for ft from xx.xx.xx.xx port 60808 ssh2
>>>>> [preauth]
>>>>> debug1: do_pam_account: called
>>>>> debug1: PAM: num PAM env strings 0
>>>>> Postponed keyboard-interactive/pam for ft from xx.xx.xx.xx port 60808
>>>>> ssh2
>>>>> [preauth]
>>>>> debug1: do_pam_account: called
>>>>> Accepted keyboard-interactive/pam for ft from xx.xx.xx.xx port 60808
>>>>> ssh2
>>>>> debug1: monitor_read_log: child log fd closed
>>>>> debug1: monitor_child_preauth: ft has been authenticated by privileged
>>>>> process
>>>>> debug1: PAM: establishing credentials
>>>>> User child is on pid 2673
>>>>> debug1: SELinux support disabled
>>>>> debug1: PAM: establishing credentials
>>>>> debug1: permanently_set_uid: 1002/65534
>>>>> debug1: Entering interactive session for SSH2.
>>>>> debug1: server_init_dispatch_20
>>>>> debug1: server_input_channel_open: ctype session rchan 0 win 2097152
>>>>> max
>>>>> 32768
>>>>> debug1: input_session_request
>>>>> debug1: channel 0: new [server-session]
>>>>> debug1: session_new: session 0
>>>>> debug1: session_open: channel 0
>>>>> debug1: session_open: session 0: link with channel 0
>>>>> debug1: server_input_channel_open: confirm session
>>>>> debug1: server_input_channel_req: channel 0 request subsystem reply 0
>>>>> debug1: session_by_channel: session 0 channel 0
>>>>> debug1: session_input_channel_req: session 0 req subsystem
>>>>> subsystem request for sftp by user ft
>>>>> debug1: subsystem: exec() /usr/lib/ssh/sftp-server
>>>>> debug1: session_by_channel: session 0 channel 0
>>>>> debug1: session_close_by_channel: channel 0 child 2674
>>>>> debug1: session_close_by_channel: channel 0: has child
>>>>> debug1: Received SIGCHLD.
>>>>> debug1: session_by_pid: pid 2674
>>>>> debug1: session_exit_message: session 0 channel 0 pid 2674
>>>>> debug1: session_exit_message: release channel 0
>>>>> debug1: session_by_channel: session 0 channel 0
>>>>> debug1: session_close_by_channel: channel 0 child 0
>>>>> debug1: session_close: session 0 pid 0
>>>>> debug1: channel 0: free: server-session, nchannels 1
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>   try  {
>>>>>
>>>>>>       ConnectFuture  connection  = VacationApplication.
>>>>>> getSshClient().connect(m_user,server.getHostName(),server.getPort());
>>>>>>       session  = (ClientSessionImpl)connection.await().getSession();
>>>>>>
>>>>>>       AuthFuture  authResult  = session.authInteractive(m_
>>>>>> user,m_password);
>>>>>>       authResult.await(10000);
>>>>>>       if  (!authResult.isSuccess()){
>>>>>>         if  (authResult.getException()==  null){
>>>>>>               throw  new  IOException("Error authenticating.");
>>>>>>       }  else  {
>>>>>>               throw  authResult.getException();
>>>>>>       }
>>>>>>       }
>>>>>>       authenticated  =  true;
>>>>>> }  catch  (IOException  ioe){
>>>>>>       VacationApplication.log("VacationUser.login(\""  +  m_user  +
>>>>>> "\",\"****\"), Server:"  +  server.toString(),ioe);
>>>>>> }  catch  (InterruptedException  ie){
>>>>>>       VacationApplication.log("VacationUser.login()",ie);
>>>>>> }  catch  (Throwable  t){
>>>>>>       VacationApplication.log("VacationUser.login()",t);
>>>>>> }
>>>>>>
>>>>>> SftpClient  ftp  =  session.createSftpClient();
>>>>>>
>>>>>> fileName="/home/"+m_user+"/"+fileName;
>>>>>> try  {
>>>>>>       InputStream  is  =  client.read(fileName);
>>>>>>    StreamUtils.streamToString(is);
>>>>>>       is.close();
>>>>>> }  catch  (IOException  ioe){
>>>>>>               // this is ok
>>>>>>               VacationApplication.log("Error retrieving
>>>>>> file:"+fileName,ioe);
>>>>>> }
>>>>>>
>>>>>> The error thrown is:
>>>>>>
>>>>>>
>>>>>> Sep 19, 2014 4:27:54 PM org.apache.catalina.core.ApplicationContext
>>>>>> log
>>>>>> SEVERE: Error retrieving file: /home/ft/.forward
>>>>>> SFTP error (2): No such file
>>>>>>           at org.apache.sshd.client.sftp.
>>>>>> DefaultSftpClient.checkStatus(
>>>>>> DefaultSftpClient.java:296)
>>>>>>           at org.apache.sshd.client.sftp.DefaultSftpClient.close(
>>>>>> DefaultSftpClient.java:432)
>>>>>>           at org.apache.sshd.client.sftp.DefaultSftpClient$4.close(
>>>>>> DefaultSftpClient.java:687)
>>>>>>           at com.mhsoftware.vacation.VacationUser.getTextFile(
>>>>>> VacationUser.java:144)
>>>>>>           at com.mhsoftware.vacation.VacationUser.getCurrentSettings(
>>>>>> VacationUser.java:101)
>>>>>>           at org.apache.jsp.EditSettings_
>>>>>> jsp._jspService(EditSettings_
>>>>>> jsp.java:75)
>>>>>>
>>>>>>
>>>>>> On the server side, I see:
>>>>>>
>>>>>> 2014-09-19T16:27:53.806036-06:00 server sshd[25990]: Accepted
>>>>>> keyboard-interactive/pam for ft from xx.xxx.xxx.xxx port 47412 ssh2
>>>>>> 2014-09-19T16:27:53.854612-06:00 server sshd[25994]: subsystem
>>>>>> request
>>>>>> for sftp by user ft
>>>>>>
>>>>>>
>>>>>> If anyone could point me in the write direction, I'd appreciate it.
>>>>>>
>>>>>>
>>>>>>
>>>>>>   --
>>>>>>
>>>>> George Sexton
>>>>> *MH Software, Inc.*
>>>>> Voice: 303 438 9585
>>>>> http://www.mhsoftware.com
>>>>>
>>>>>
>>>>>  --
>>> George Sexton
>>> *MH Software, Inc.*
>>> Voice: 303 438 9585
>>> http://www.mhsoftware.com
>>>
>>>
> --
> George Sexton
> *MH Software, Inc.*
> Voice: 303 438 9585
> http://www.mhsoftware.com
>

Reply via email to