Пока на вашем локальном компьютере работает SSH-сервер (а ваше приложение имеет необходимые учетные данные для входа), вы также можете использовать JSch для подключения к локальному компьютеру - просто укажите localhost
(или 127.0.0.1
) какимя хоста для соединения.
Это будет иметь некоторые издержки, так как вы шифруете и дешифруете все данные, что на самом деле не является необходимым для выполнения некоторой команды локально.(С другой стороны, это позволит вам запускать команды от имени другого пользователя, для которого в противном случае вам понадобится что-то вроде sudo
или su
, или RunAs
под Windows.)
JSch реализуетsetOutputStream
и setErrStream
поверх соответствующих get...
методов - он использует что-то подобное внутреннему PipedInputStream и отдельный поток, который перемещает данные между этими потоками.
Поскольку JSch является открытым исходным кодом,вы можете просто посмотреть, как это делается (в классе Channel
, если я правильно помню), и скопировать соответствующие методы в ваш класс, который делает то же самое для Process
.
Есть ли способ сказать JSch не шифровать данные?
Вы можете использовать шифр none
, например, без шифрования.По умолчанию это отключено на всех клиентах и серверах общего назначения (так как это устраняет половину цели SSH), но при правильной конфигурации вы можете включить его.В JSch вы можете использовать
session.setConfig("cipher.s2c", "none,..."); // server to client
session.setConfig("cipher.c2s", "none,..."); // client to server
(Этот параметр конфигурации является списком всех параметров, поддерживаемых клиентом - см. документацию setConfig
для всех поддерживаемых значений. Сервер обычно будетвыберите первый из этого списка, который он также поддерживает. Чтобы не шифровать (или отменять соединение), укажите только none
.)
Я не знаю, как включить это на сервере SSH -прочитайте документацию вашего сервера.(И включите его только для localhost, если это возможно.)
Рекомендуемый способ его использования - переключаться на шифр none
только после аутентификации (чтобы аутентификация все еще была зашифрована), но для localhost это можетне будет необходимости.(Вы можете использовать session.rekey()
для переключения шифра (и ключа) после изменения конфигурации.)