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 <k...@kylemiller.com> 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