
Компактная, портативная встраиваемая библиотека 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) Когда
поддержка shell включена, эти фиктивные учётные записи не будут работать. Они
не существуют в системном файле passwd. Пользователи пройдут аутентификацию,
но сервер выдаст ошибку, поскольку их нет в системе. Вы
можете добавить собственное имя пользователя в список паролей или открытых ключей в
echoserver. Эта учётная запись будет подключена к shell, запущенному
echoserver с привилегиями пользователя, запустившего echoserver.
wolfSSH поставляется с несколькими примерами инструментов для целей тестирования и для демонстрации совместимости с другими реализациями SSH.
echoserver — это рабочая лошадка wolfSSH. Изначально он позволял только аутентифицироваться под одной из заранее заданных учётных записей и повторял введённые символы. При включении поддержки shell он может запустить пользовательский shell. Для этого потребуется реальное имя пользователя на машине и обновлённая функция обратного вызова аутентификации пользователя для проверки учётных данных. 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