I've also worked on a *very basic* and initial support for SFTP if you
want to have a look at it.
https://issues.apache.org/jira/browse/SSHD-55
On Thu, Nov 12, 2009 at 08:42, Guillaume Nodet <[email protected]> wrote:
> Subsystems are not really supported yet.
> The error you see is already reported at
> https://issues.apache.org/jira/browse/SSHD-48 I think.
> I'll fix it asap.
>
> On Wed, Nov 11, 2009 at 15:57, Kyle Miller <[email protected]> wrote:
>> I am using mina sshd version 0.2.0.
>>
>> I created a simple main, and sftp command factory and command and tried to
>> connect to my daemon with my OS X command line sftp client, and a few other
>> graphical clients and it all ends the same way. With a NPE in the
>> ChannelSession.doWriteData line 260. After debugging through the code the
>> SFTP commands come in with a subsystem type, when that happens the shellIn
>> and shellOut streams in ChannelSession remain null hence the NPE. I have
>> included the stack trace as well as my classes to demonstrate the issue.
>>
>> 2009-11-11 08:50:45,710 [NioProcessor-2] WARN
>> org.apache.sshd.server.session.ServerSession - Exception caught
>> java.lang.NullPointerException
>> at
>> org.apache.sshd.server.channel.ChannelSession.doWriteData(ChannelSession.java:260)
>> at
>> org.apache.sshd.common.channel.AbstractChannel.handleData(AbstractChannel.java:116)
>> at
>> org.apache.sshd.common.session.AbstractSession.channelData(AbstractSession.java:863)
>> at
>> org.apache.sshd.server.session.ServerSession.handleMessage(ServerSession.java:195)
>> at
>> org.apache.sshd.common.session.AbstractSession.decode(AbstractSession.java:490)
>> at
>> org.apache.sshd.common.session.AbstractSession.messageReceived(AbstractSession.java:214)
>> at
>> org.apache.sshd.common.AbstractSessionIoHandler.messageReceived(AbstractSessionIoHandler.java:58)
>> at
>> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:721)
>> at
>> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:433)
>> at
>> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
>> at
>> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:801)
>> at
>> org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119)
>> at
>> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:433)
>> at
>> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:425)
>> at
>> org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:603)
>> at
>> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:563)
>> at
>> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:552)
>> at
>> org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:56)
>> at
>> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:891)
>> at
>> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> at java.lang.Thread.run(Thread.java:637)
>>
>>
>> ====================================================
>>
>> import org.apache.sshd.SshServer;
>> import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
>> import org.apache.sshd.util.BogusPasswordAuthenticator;
>> import org.apache.sshd.util.EchoShellFactory;
>>
>> public class Sftpd {
>>
>> public static void main(String[] args) throws IOException {
>>
>> SshServer sshd = SshServer.setUpDefaultServer();
>> sshd.setKeyPairProvider(new
>> SimpleGeneratorHostKeyProvider("hostkey.ser"));
>> sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
>> sshd.setShellFactory(new EchoShellFactory());
>> // sshd.setShellFactory(new ProcessShellFactory(new String[] {
>> "/bin/sh", "-i", "-l" }));
>> sshd.setPort(2222);
>> sshd.setCommandFactory(new SftpCommandFactory());
>> sshd.start();
>>
>> }
>>
>> }
>>
>>
>> ======================================================
>> import org.apache.sshd.server.CommandFactory;
>> import org.apache.sshd.server.command.UnknownCommand;
>> import org.slf4j.Logger;
>> import org.slf4j.LoggerFactory;
>>
>>
>> public class SftpCommandFactory implements CommandFactory {
>> private final Logger log =
>> LoggerFactory.getLogger(SftpCommandFactory.class);
>>
>> public Command createCommand(String command) {
>> log.info("SFtP: "+command);
>> String[] args = command.split(" ");
>>
>>
>> if (args.length > 0 && "sftp".equals(args[0])) return new
>> SftpCommand(args);
>>
>> return new UnknownCommand(command);
>> }
>>
>> }
>>
>> ==============================================================
>>
>> import java.io.IOException;
>> import java.io.InputStream;
>> import java.io.OutputStream;
>>
>> import org.apache.sshd.server.CommandFactory;
>> import org.apache.sshd.server.CommandFactory.ExitCallback;
>> import org.slf4j.Logger;
>> import org.slf4j.LoggerFactory;
>>
>>
>> public class SftpCommand implements CommandFactory.Command, Runnable {
>> private final Logger log = LoggerFactory.getLogger(SftpCommand.class);
>> private OutputStream err;
>> private ExitCallback callBack;
>> private InputStream in;
>> private OutputStream out;
>> private IOException error;
>>
>> public SftpCommand(String[] args) {
>> log.info("sftp args: "+args);
>> }
>>
>> public void setErrorStream(OutputStream err) {
>>
>> }
>>
>> public void setExitCallback(ExitCallback callback) {
>>
>> }
>>
>> public void setInputStream(InputStream in) {
>>
>> }
>>
>> public void setOutputStream(OutputStream out) {
>>
>> }
>>
>> public void start() throws IOException {
>> if (error != null) {
>> throw error;
>> }
>> new Thread(this).start();
>> }
>>
>> public void run() {
>> callBack.onExit(0);
>> }
>> }
>>
>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com
>
--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com