Это продолжение до:

Использование JSch для SFTP, когда нужно также переключить пользователя

Эта проблема осталась на заднем плане, так как я задал оригинальный вопрос, пока наша команда по управлению серверами просматривает их политики, но сейчас я снова поднимаю ее!

Я хочу использовать JSch для подключения к удаленному серверу, а затем использовать sftp или scp для доступа к некоторым файлам - согласно примеру кода в исходном вопросе. Проблема заключается в том, что эти файлы принадлежат другому пользователю, поэтому мне нужно su для этого пользователя, а затем предоставить пароль перед выполнением команды sftp или scp.

Это не может быть сделано в JSch, и это правильно, потому что это риск для безопасности, чтобы иметь возможность отправить пароль через канал exec. Так что у меня есть варианты, которые я вижу вперед.

  1. Переопределить функциональность JSch. Мартин очень услужливо дал несколько советов в ответе на первоначальный вопрос о том, как это можно сделать и как пароль можно передать через «черный ход». Но я не уверен в своей способности переопределить код JSch, и еще раз, даже в случае успеха, я бы обошел функцию безопасности, которая существует по законным причинам, поэтому я не хотел бы пытаться это делать.

  2. На сервере предоставьте моему пользователю доступ без пароля другому пользователю. Это нет, так как моя команда управления сервером не согласится с этим.

  3. У меня есть серверный сценарий .sh, который может запускаться моим пользователем для получения доступа к файлам. Опять же, это нет, так как моя команда управления сервером не согласится на это!

  4. Автоматизируйте сеанс замазки, то есть физически открывайте замазку и передавайте команды в сессию замазки построчно от клиента Java.

  5. Сдаться! Должен ли я согласиться с тем, что я пытаюсь сделать что-то, что не должно быть автоматизировано, а вместо этого просто провести ручной тест?

Буду крайне признателен за любые мысли / рекомендации.

1
Jon H 24 Апр 2017 в 13:13

2 ответа

Лучший ответ

Я пытаюсь сделать что-то здесь, что не должно быть автоматизировано.

Это правильно в принципе.

Единственное правильное автоматическое решение - войти в систему напрямую с пользователем, который имеет доступ к файлам. Все остальное - просто взлом или обход вашей политики безопасности. В идеале вы должны проходить аутентификацию с помощью специального закрытого ключа, чтобы позволить контролировать доступ из вашего приложения и иметь возможность контролировать доступ (например, временно отключить его, не затрагивая другие виды использования той же учетной записи).

Хотя я могу представить, что ваши системные администраторы не разрешат вам прямой вход в систему, потому что они не могут предвидеть, какие (если таковые имеются) проблемы безопасности это приносит.

1
Martin Prikryl 24 Апр 2017 в 13:00

Я просто хотел поделиться, что у меня есть решение для этого вопроса, адаптировав пример JSch, JumpHosts.

http://www.jcraft.com/jsch/examples/JumpHosts.java

Переопределение унаследованных методов в статическом классе MyUserInfo позволило мне автоматически принимать поля подсказок, поля ввода и т. Д. Без необходимости использовать клавиатуру, поэтому при необходимости у меня есть полностью автоматизированный тест.

Здорово, что команда jcraft предоставила такие полезные проработанные примеры. Спасибо всем, кто нашел время, чтобы прочитать и рассмотреть мой вопрос.

Изменить: Согласно комментарию Мартина, я должен отметить, что это работает, только если у вас есть специальное правило в конфигурации SSH, которое позволяет прямой вход user2 с localhost (при этом не разрешая прямой удаленный вход). Это не судо. Так что это не может работать в целом.

1
Jon H 26 Апр 2017 в 08:06