Это продолжение до:
Использование JSch для SFTP, когда нужно также переключить пользователя
Эта проблема осталась на заднем плане, так как я задал оригинальный вопрос, пока наша команда по управлению серверами просматривает их политики, но сейчас я снова поднимаю ее!
Я хочу использовать JSch для подключения к удаленному серверу, а затем использовать sftp или scp для доступа к некоторым файлам - согласно примеру кода в исходном вопросе. Проблема заключается в том, что эти файлы принадлежат другому пользователю, поэтому мне нужно su для этого пользователя, а затем предоставить пароль перед выполнением команды sftp или scp.
Это не может быть сделано в JSch, и это правильно, потому что это риск для безопасности, чтобы иметь возможность отправить пароль через канал exec. Так что у меня есть варианты, которые я вижу вперед.
Переопределить функциональность JSch. Мартин очень услужливо дал несколько советов в ответе на первоначальный вопрос о том, как это можно сделать и как пароль можно передать через «черный ход». Но я не уверен в своей способности переопределить код JSch, и еще раз, даже в случае успеха, я бы обошел функцию безопасности, которая существует по законным причинам, поэтому я не хотел бы пытаться это делать.
На сервере предоставьте моему пользователю доступ без пароля другому пользователю. Это нет, так как моя команда управления сервером не согласится с этим.
У меня есть серверный сценарий .sh, который может запускаться моим пользователем для получения доступа к файлам. Опять же, это нет, так как моя команда управления сервером не согласится на это!
Автоматизируйте сеанс замазки, то есть физически открывайте замазку и передавайте команды в сессию замазки построчно от клиента Java.
Сдаться! Должен ли я согласиться с тем, что я пытаюсь сделать что-то, что не должно быть автоматизировано, а вместо этого просто провести ручной тест?
Буду крайне признателен за любые мысли / рекомендации.
2 ответа
Я пытаюсь сделать что-то здесь, что не должно быть автоматизировано.
Это правильно в принципе.
Единственное правильное автоматическое решение - войти в систему напрямую с пользователем, который имеет доступ к файлам. Все остальное - просто взлом или обход вашей политики безопасности. В идеале вы должны проходить аутентификацию с помощью специального закрытого ключа, чтобы позволить контролировать доступ из вашего приложения и иметь возможность контролировать доступ (например, временно отключить его, не затрагивая другие виды использования той же учетной записи).
Хотя я могу представить, что ваши системные администраторы не разрешат вам прямой вход в систему, потому что они не могут предвидеть, какие (если таковые имеются) проблемы безопасности это приносит.
Я просто хотел поделиться, что у меня есть решение для этого вопроса, адаптировав пример JSch, JumpHosts.
http://www.jcraft.com/jsch/examples/JumpHosts.java
Переопределение унаследованных методов в статическом классе MyUserInfo позволило мне автоматически принимать поля подсказок, поля ввода и т. Д. Без необходимости использовать клавиатуру, поэтому при необходимости у меня есть полностью автоматизированный тест.
Здорово, что команда jcraft предоставила такие полезные проработанные примеры. Спасибо всем, кто нашел время, чтобы прочитать и рассмотреть мой вопрос.
Изменить: Согласно комментарию Мартина, я должен отметить, что это работает, только если у вас есть специальное правило в конфигурации SSH, которое позволяет прямой вход user2 с localhost (при этом не разрешая прямой удаленный вход). Это не судо. Так что это не может работать в целом.
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].