
Компактная, портативная встраиваемая библиотека SSHv2-клиента и сервера на C с поддержкой SCP, SFTP, перенаправления портов и постквантового обмена ключами для встраиваемых систем и IoT.
Встраиваемый SSH-сервер wolfSSL Руководство wolfSSH
wolfSSH зависит от wolfCrypt, который входит в состав wolfSSL. Ниже приведена простейшая конфигурация wolfSSL для включения wolfSSH.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
В некоторых системах после установки требуется необязательная команда ldconfig.
Чтобы использовать функцию генерации ключей в wolfSSH, wolfSSL необходимо
настроить с параметром keygen: --enable-keygen.
При использовании сертификатов X.509 для аутентификации пользователей wolfSSL
должен быть собран с включённым TLS. wolfSSH использует систему управления
сертификатами wolfSSL для X.509, включая OCSP-запросы. Чтобы разрешить OCSP,
добавьте --enable-ocsp в конфигурацию wolfSSL.
Если большая часть кода wolfSSL не нужна, wolfSSL можно настроить
с опцией только криптографии: --enable-cryptonly.
Дополнительные параметры сборки wolfSSL описаны в главе второй руководства wolfSSH.
Из исходного каталога wolfSSH выполните:
$ ./autogen.sh (если клонировано с GitHub)
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
Скрипт autogen.sh нужно запускать только один раз после клонирования
репозитория. Если вы уже запускали его или используете код из
архива исходников, его следует пропустить.
Для сборки под Windows с Visual Studio см. файл "ide/winvs/README.md".
ПРИМЕЧАНИЕ: На устройствах с ограниченными ресурсами может потребоваться
установить DEFAULT_WINDOW_SZ в меньшее значение. Его также можно увеличить
в настольных сценариях использования, чтобы помочь с передачей больших файлов.
По умолчанию каналы настроены на приём до 128 КБ данных перед отправкой
сообщения о корректировке окна канала. Пример установки размера окна для
новых каналов выглядит следующим образом:
./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
Для 32-битных платформ Linux можно добавить поддержку файлов > 2 ГБ, скомпилировав
с CFLAGS=-D_FILE_OFFSET_BITS=64.
Каталог examples содержит echoserver, к которому должен
суметь подключиться любой клиент. Из терминала выполните:
$ ./examples/echoserver/echoserver -f
Опция -f включает режим только эха. Из другого терминала выполните:
$ ssh jill@localhost -p 22222
Когда будет запрошен пароль, введите "upthehill". Сервер отправит клиенту стандартное приветствие:
wolfSSH Example Echo Server
Символы, введённые в клиенте, будут отображены на экране сервером. Если символы отображаются дважды, значит в клиенте включено локальное эхо. Echoserver не является полноценным терминалом, поэтому преобразование CR/LF не будет работать как ожидается.
Следующие управляющие символы вызывают специальные действия в echoserver:
После клонирования репозитория обязательно сделайте тестовые приватные ключи
доступными только для чтения пользователем, иначе ssh скажет вам это сделать.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem \
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
Аутентификация на примере echoserver может быть выполнена с помощью пароля или открытого ключа. Чтобы использовать пароль, командная строка:
$ ssh -p 22222 USER@localhost
Где пары USER и пароль:
jill:upthehill
jack:fetchapail
Чтобы использовать аутентификацию по открытому ключу, используйте командную строку:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Где USER может быть gretel или hansel, а TYPE — rsa или
ecc.
Имейте в виду, что echoserver имеет несколько фиктивных учётных записей в своей
функции обратного вызова wsUserAuth(). (jack, jill, hansel и gretel) Когда
поддержка оболочки включена, эти фиктивные учётные записи не будут работать. Они
не существуют в системном файле passwd. Пользователи аутентифицируются,
но сервер выдаст ошибку, потому что они не существуют в системе. Вы
можете добавить своё собственное имя пользователя в список паролей или открытых ключей в
echoserver. Эта учётная запись будет залогинена в оболочку, запущенную
echoserver, с привилегиями пользователя, запускающего echoserver.
wolfSSH поставляется с несколькими примерами инструментов для целей тестирования и для демонстрации совместимости с другими реализациями SSH.
Echoserver — это рабочая лошадка wolfSSH. Изначально он позволял только аутентифицировать одну из стандартных учётных записей и повторял символы, введённые в него. При включении поддержки оболочки он может запустить пользовательскую оболочку. Для этого потребуется реальное имя пользователя на машине и обновлённая функция обратного вызова аутентификации пользователя для проверки учётных данных. Echoserver также может обрабатывать соединения SCP и SFTP.
Инструмент echoserver принимает следующие параметры командной строки:
-1 exit after a single (one) connection
-e expect ECC public key from client
-E use ECC private key
-f echo input
-p <num> port to accept on, default 22222
-N use non-blocking sockets
-d <string> set the home directory for SFTP connections
-j <file> load in a public key to accept from peer
Клиент устанавливает соединение с SSH-сервером. В простейшем режиме он отправляет строку "Hello, wolfSSH!" на сервер, выводит ответ, а затем завершается. С опцией псевдотерминала клиент будет настоящим клиентом.
Инструмент client принимает следующие параметры командной строки:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-e use sample ecc key for user
-i <filename> filename for the user's private key
-j <filename> filename for the user's public key
-x exit after successful connection without doing
read/write
-N use non-blocking sockets
-t use pseudo terminal
-c <command> executes remote command and pipe stdin/stdout
-a Attempt to use SSH-AGENT
Инструмент portfwd устанавливает соединение с SSH-сервером и настраивает слушателя для локальной переадресации портов или запрашивает слушателя для удалённой переадресации портов. После соединения инструмент завершается.
Инструмент portfwd принимает следующие параметры командной строки:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-F <host> host to forward from, default 0.0.0.0
-f <num> host port to forward from (REQUIRED)
-T <host> host to forward to, default to host
-t <num> port to forward to (REQUIRED)
scpclient, wolfscp, устанавливает соединение с SSH-сервером и копирует указанные файлы с локальной машины или на неё.
Инструмент scpclient принимает следующие параметры командной строки:
-H <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-L <from>:<to> copy from local to server
-S <from>:<to> copy from server to local