ssh-доступ к весеннему загрузочному приложению

В Spring Boot 1.2.3.RELEASE попытка настроить SSH на JDK 1.8, Windows 7.

Я настроил application.properties как:

shell.ssh.port=2212
shell.ssh.enabled=true
shell.auth=simple
shell.auth.simple.user.name=user
shell.auth.simple.user.password=password

Когда приложение запускается и пытается получить к нему доступ через шпатлевку, появляется следующее исключение:

java.lang.IllegalStateException: No session available
    at org.apache.sshd.common.AbstractSessionIoHandler.exceptionCaught(AbstractSessionIoHandler.java:52) ~[sshd-core-0.6.0.jar:0.6.0]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.exceptionCaught(DefaultIoFilterChain.java:697) ~[mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextExceptionCaught(DefaultIoFilterChain.java:483) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1100(DefaultIoFilterChain.java:46) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.exceptionCaught(DefaultIoFilterChain.java:791) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.IoFilterAdapter.exceptionCaught(IoFilterAdapter.java:111) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextExceptionCaught(DefaultIoFilterChain.java:483) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireExceptionCaught(DefaultIoFilterChain.java:471) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionCreated(DefaultIoFilterChain.java:359) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$700(DefaultIoFilterChain.java:46) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionCreated(DefaultIoFilterChain.java:771) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.IoFilterAdapter.sessionCreated(IoFilterAdapter.java:79) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionCreated(DefaultIoFilterChain.java:357) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireSessionCreated(DefaultIoFilterChain.java:350) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.service.IoServiceListenerSupport.fireSessionCreated(IoServiceListenerSupport.java:211) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.addNow(AbstractPollingIoProcessor.java:514) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.handleNewSessions(AbstractPollingIoProcessor.java:481) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$200(AbstractPollingIoProcessor.java:67) [mina-core-2.0.2.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1071) [mina-core-2.0.2.jar:na]
    at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) [mina-core-2.0.2.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_31]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_31]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_31]
Caused by: java.lang.AbstractMethodError: org.apache.sshd.common.keyprovider.AbstractKeyPairProvider.loadKeys()[Ljava/security/KeyPair;
    at org.apache.sshd.common.keyprovider.AbstractKeyPairProvider.getKeyTypes(AbstractKeyPairProvider.java:49) ~[sshd-core-0.6.0.jar:0.6.0]
    at org.apache.sshd.server.session.ServerSession.sendKexInit(ServerSession.java:331) ~[sshd-core-0.6.0.jar:0.6.0]
    at org.apache.sshd.server.session.ServerSession.<init>(ServerSession.java:92) ~[sshd-core-0.6.0.jar:0.6.0]
    at org.apache.sshd.server.session.SessionFactory.doCreateSession(SessionFactory.java:43) ~[sshd-core-0.6.0.jar:0.6.0]
    at org.apache.sshd.common.session.AbstractSessionFactory.createSession(AbstractSessionFactory.java:38) ~[sshd-core-0.6.0.jar:0.6.0]
    at org.apache.sshd.common.AbstractSessionIoHandler.sessionCreated(AbstractSessionIoHandler.java:37) ~[sshd-core-0.6.0.jar:0.6.0]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.sessionCreated(DefaultIoFilterChain.java:643) ~[mina-core-2.0.2.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionCreated(DefaultIoFilterChain.java:357) [mina-core-2.0.2.jar:na]

Есть ли что-то, что мне здесь не хватает?

Спасибо.


Обновление: спасибо за указатели. Вот мое дерево зависимостей:

[INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:1.2.3.RELEASE:compile
[INFO] |  \- org.springframework.boot:spring-boot-actuator:jar:1.2.3.RELEASE:compile
[INFO] \- org.springframework.boot:spring-boot-starter-remote-shell:jar:1.2.3.RELEASE:compile
[INFO]    +- org.crashub:crash.cli:jar:1.3.1:compile
[INFO]    +- org.crashub:crash.connectors.ssh:jar:1.3.1:compile
[INFO]    |  +- org.apache.sshd:sshd-core:jar:0.6.0:compile
[INFO]    |  +- org.apache.sshd:sshd-pam:jar:0.11.0:compile
[INFO]    |  |  \- net.sf.jpam:jpam:jar:1.1:compile
[INFO]    |  +- org.bouncycastle:bcpkix-jdk15on:jar:1.51:compile
[INFO]    |  \- org.apache.mina:mina-core:jar:2.0.2:compile
[INFO]    +- org.crashub:crash.embed.spring:jar:1.3.1:compile
[INFO]    +- org.crashub:crash.plugins.cron:jar:1.3.1:compile
[INFO]    |  \- it.sauronsoftware.cron4j:cron4j:jar:2.2.5:compile
[INFO]    +- org.crashub:crash.plugins.mail:jar:1.3.1:compile
[INFO]    |  \- javax.mail:mail:jar:1.4.7:compile
[INFO]    |     \- javax.activation:activation:jar:1.1:compile
[INFO]    +- org.crashub:crash.shell:jar:1.3.1:compile
[INFO]    \- org.codehaus.groovy:groovy:jar:2.3.11:compile

Все зависимости кажутся переходными от spring-boot-starter-remote-shell. Попробую исправить вручную.


person samyem    schedule 28.04.2015    source источник
comment
Вы уверены, что можете получить доступ к ssh через порт 2212?   -  person Leandro Carracedo    schedule 28.04.2015
comment
Я могу, потому что я вижу, что мое приложение делает это исключение, как только я пытаюсь подключиться. Я запускаю все это локально без брандмауэра.   -  person samyem    schedule 28.04.2015
comment
Это проект maven?   -  person Morfic    schedule 28.04.2015
comment
Да, стандартное весеннее загрузочное приложение, развернутое как jar. Некоторые из моих зависимостей находятся здесь: pastebin.com/QWv5DjXi   -  person samyem    schedule 28.04.2015
comment
Можешь поделиться всей помпой?   -  person Morfic    schedule 28.04.2015


Ответы (1)


Я начал проект весенней загрузки с jdk1.8, добавил зависимость spring-boot-starter-remote-shell maven и вашу конфигурацию, попробовал, и все прошло гладко.

Однако java.lang.AbstractMethodError заставил меня заподозрить проблему с путем к классам. , поэтому я быстро запустил mvn dependency:tree в своем проекте, и, среди прочего, spring-boot-starter-remote-shell:jar:1.2.3.RELEASE имеет org.apache.sshd:sshd-core:jar:0.11.0 в качестве транзитивной зависимости, как вы можете видеть ниже.

[INFO] +- org.springframework.boot:spring-boot-starter-remote-shell:jar:1.2.3.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-actuator:jar:1.2.3.RELEASE:compile
[INFO] |  |  \- org.springframework.boot:spring-boot-actuator:jar:1.2.3.RELEASE:compile
[INFO] |  +- org.crashub:crash.cli:jar:1.3.1:compile
[INFO] |  +- org.crashub:crash.connectors.ssh:jar:1.3.1:compile
[INFO] |  |  +- org.apache.sshd:sshd-core:jar:0.11.0:compile <===THIS ONE===
[INFO] |  |  +- org.apache.sshd:sshd-pam:jar:0.11.0:compile
[INFO] |  |  |  \- net.sf.jpam:jpam:jar:1.1:compile
[INFO] |  |  +- org.bouncycastle:bcprov-jdk15on:jar:1.51:compile
[INFO] |  |  +- org.bouncycastle:bcpkix-jdk15on:jar:1.51:compile
[INFO] |  |  \- org.apache.mina:mina-core:jar:2.0.7:compile
[INFO] |  +- org.crashub:crash.embed.spring:jar:1.3.1:compile
[INFO] |  +- org.crashub:crash.plugins.cron:jar:1.3.1:compile
[INFO] |  |  \- it.sauronsoftware.cron4j:cron4j:jar:2.2.5:compile
[INFO] |  +- org.crashub:crash.plugins.mail:jar:1.3.1:compile
[INFO] |  |  \- javax.mail:mail:jar:1.4:compile
[INFO] |  |     \- javax.activation:activation:jar:1.1:compile
[INFO] |  +- org.crashub:crash.shell:jar:1.3.1:compile
[INFO] |  \- org.codehaus.groovy:groovy:jar:2.3.11:compile

Еще один быстрый взгляд на вашу трассировку стека показал, что у вас, похоже, другая версия пути к классам at org.apache.sshd.common.keyprovider.AbstractKeyPairProvider.getKeyTypes(AbstractKeyPairProvider.java:49) ~[sshd-core-0.6.0.jar:0.6.0], поэтому я сделал следующее: вручную указать эту версию как зависимость в файле pom. Когда я перезапустил приложение и попытался подключиться через SSH, я получил то же исключение, что и вы.

Также глядя на классы, метод AbstractKeyPairProvider.loadKeys() имеет другую подпись, которая, скорее всего, испортит реализации в зависимости от контракта 0.11.0, например URLKeyPairProvider:

  • 0.6.0 protected abstract KeyPair[] loadKeys();
  • 0.11.0 public abstract Iterable<KeyPair> loadKeys();

несоответствия методов

Таким образом, либо вы также непреднамеренно добавили эту версию, либо некоторые из ваших других зависимостей ссылаются на нее, эффективно затеняя 0.11.0 в пути к классам. В моем случае я включил конечные точки HTTP-привода Spring Boot. подтверждая вышеизложенное: classpath order

В заключение проверьте свое дерево зависимостей и выясните, откуда берутся sshd-core 0.6.0 и, возможно, mina-core 2.0.2, и исключите их.

person Morfic    schedule 28.04.2015
comment
Отследил источник моей проблемы, используя ваше предложение. Большое спасибо! - person samyem; 29.04.2015
comment
@samyem рад помочь, хотя что-то выглядит подозрительно. Я проверил crash.parent-1.3.1.pom, от которого наследуется crash.connectors.ssh-1.3.1, и указал версии sshd-core:0.11.0 и mina-core:2.0.7, поэтому мне кажется странным, что он заканчивается 0.6.0 и 2.0.2. - person Morfic; 29.04.2015
comment
Да неважно это дерево; Я отследил, что была еще одна зависимость, которая добавила более старую версию sshd-core. Спасибо. - person samyem; 29.04.2015
comment
@samyem отлично! Просто из любопытства, какая еще зависимость была? - person Morfic; 29.04.2015
comment
Ну, у меня была зависимость от частного модуля, поддерживаемого другой внутренней группой. Теперь разобрался и работает отлично. - person samyem; 29.04.2015