У меня есть приложение Java, которое использует RMI для связи клиент / сервер.
Для обеспечения этой связи трафик передается через ssh-соединение.
Все работает хорошо, за исключением того, что соединение автоматически закрывается через несколько секунд.
Я установил для свойства keep alive значение:
- SSHD соединение
- SSH-клиент
- ServerSocket на стороне сервера
- ClientSocket на стороне клиента
Обычная процедура подключения к регистру (порт 4000) и вызова метода для объекта (порт 4005) выводит следующий журнал:
INFO org.apache.sshd.server.session.ServerSession - Authentication succeeded
INFO org.apache.sshd.server.session.ServerSession - Received SSH_MSG_CHANNEL_OPEN direct-tcpip
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Receiving request for direct tcpip: hostToConnect=ThinkPad, portToConnect=4000, originatorIpAddress=127.0.0.1, originatorPort=64539
INFO org.apache.sshd.server.session.ServerSession - Received SSH_MSG_CHANNEL_OPEN direct-tcpip
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Receiving request for direct tcpip: hostToConnect=ThinkPad, portToConnect=4005, originatorIpAddress=127.0.0.1, originatorPort=64540
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Received SSH_MSG_CHANNEL_EOF on channel 1
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Send SSH_MSG_CHANNEL_CLOSE on channel 1
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Received SSH_MSG_CHANNEL_CLOSE on channel 1
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Closing channel 1 immediately
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Closing channel 1 immediately
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Send SSH_MSG_CHANNEL_EOF on channel 1
INFO org.apache.sshd.server.session.ServerSession - Closing session
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Closing channel 0 immediately
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Closing channel 0 immediately
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Send SSH_MSG_CHANNEL_EOF on channel 0
Строка ** Получено SSH_MSG_CHANNEL_EOF на канале 1 ** предполагает, что метод, вызванный для объекта, сгенерировал сообщение EOF. Это приводит к закрытию сессии ...
Возможные решения, которые я могу придумать:
- Перехватить или предотвратить сообщение EOF (но где и как?)
- Попробуйте настроить фабрику сеансов на стороне сервера, чтобы игнорировать сообщения EOF (чувствует себя неправильно ...)