Встроенный SSH -сервер Wolfssh в Wolfssl
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 может быть настроен с опцией только Crypto: --enable-cryptonly .
Дополнительные варианты сборки для Wolfssl находятся во второй главе. Руководства Wolfssh.
Из прогона справочника Woofssh Source Directory:
$ ./autogen.sh
$ ./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 каталога содержит эхозервер, к которому может быть способный клиент. Из терминала пробега:
$ ./examples/echoserver/echoserver -f
Опция -f включает в себя эхо -точный режим. Из другого терминала пробега:
$ ssh jill@localhost -p 22222
При запросе пароля введите «upthehill». Сервер отправит клиенту консервированный баннер:
wolfSSH Example Echo Server
Символы, введенные в клиент, будут отозваны на экране сервером. Если персонажи повторяются дважды, клиент включен локальный эхо. Эхозервер не является надлежащим терминалом, поэтому перевод 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
Где пары пользователя и паролей:
jill:upthehill
jack:fetchapail
Для использования аутентификации открытого ключа Используйте командную строку:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Где пользователь может быть gretel или hansel , а тип - rsa или ecc .
Имейте в виду, что эхозервер имеет несколько поддельных аккаунтов в своей функции обратного вызова wsUserAuth() . (Джек, Джилл, Гензель и Гретель) Когда включена поддержка оболочки, эти фальшивые учетные записи не будут работать. Они не существуют в файле Passwd системы. Пользователи будут аутентифицировать подлинность, но сервер ошибся, потому что их не существует в системе. Вы можете добавить свое собственное имя пользователя в список пароля или общедоступных ключей в Echoserver. Эта учетная запись будет зарегистрирована в оболочке, созданной Echoserver с привилегиями пользователя, работающего Echoserver.
Wolfssh поставляется с несколькими примерами инструментов для целей тестирования и для демонстрации совместимости с другими реализациями SSH.
Эхосервер - это рабочая лошадка Вольфша. Первоначально он позволил лишь аутентифицировать одну из консервированных аккаунтов и повторить вводные символы. При включении поддержки оболочки он может породить пользовательскую оболочку. Ему потребуется фактическое имя пользователя на машине и обновленная функция обратного вызова пользователя для проверки учетных данных. Эхозервер также может обрабатывать соединения 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. В своем простейшем режиме он отправляет строку «Привет, Вольфсши!» На сервер печатает ответ, а затем выходит. С опцией псевдо -терминала клиент будет реальным клиентом.
Клиентский инструмент принимает следующие параметры командной строки:
-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 psuedo 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
SFTPClient, WolfSFTP, устанавливает соединение с SSH -сервером и позволяет навигации по каталогам, получение и размещение файлов, создание и удаление каталогов и т. Д.
Инструмент sftpclient принимает следующие параметры командной строки:
-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
-d <path> set the default local path
-N use non blocking sockets
-e use ECC user authentication
-l <filename> local filename
-r <filename> remote filename
-g put local filename as remote filename
-G get remote filename as local filename
Wolfssh включает в себя поддержку на стороне сервера для SCP, которая включает в себя поддержку обоих копирования файлов «для« сервера »и копирование файлов» с «сервера». Как одно файл, так и рекурсивный каталог поддерживаются с помощью вызовов отправки и получения по умолчанию.
Чтобы составить Wolfssh с поддержкой SCP, используйте опцию сборки --enable-scp или определите WOLFSSH_SCP :
$ ./configure --enable-scp
$ make
Для получения полных сведений об использовании API и реализации, пожалуйста, см. Руководство пользователя Wolfssh.
Примеры Wolfssh примеры были настроены для принятия одного запроса SCP и скомпилируется по умолчанию при составлении библиотеки Wolfssh. Чтобы запустить пример сервера, запустите:
$ ./examples/server/server
Стандартные команды SCP могут использоваться на стороне клиента. Ниже приведены несколько примеров, где scp представляет клиент SSH, которого вы используете.
Чтобы скопировать один файл на сервер, используя пример примера по умолчанию «Jill»:
$ scp -P 22222 <local_file> [email protected]:<remote_path>
Чтобы скопировать один и тот же отдельный файл на сервер, но с временной меткой и в режиме Verbose:
$ scp -v -p -P 22222 <local_file> [email protected]:<remote_path>
Рекурсивно скопировать каталог на сервер:
$ scp -P 22222 -r <local_dir> [email protected]:<remote_dir>
Чтобы скопировать один файл с сервера на локальный клиент:
$ scp -P 22222 [email protected]:<remote_file> <local_path>
Рекурсивно скопировать каталог с сервера на локальный клиент:
$ scp -P 22222 -r [email protected]:<remote_dir> <local_path>
Wolfssh обеспечивает поддержку для пересылки портов. Это позволяет пользователю настроить зашифрованный туннель на другой сервер, где клиент SSH прослушивает сокет и пересылает подключения на этом сокете на другой розетку на сервере.
Для составления Wolfssh с поддержкой пересылки порта используйте опцию сборки --enable-fwd или определите WOLFSSH_FWD :
$ ./configure --enable-fwd
$ make
Для получения полных сведений об использовании API и реализации, пожалуйста, см. Руководство пользователя Wolfssh.
Инструмент PortFWD примеров создаст канал стиля «прямой TCPIP». Эти указания предполагают, что у вас есть сервер OpenSsh, работающий в фоновом режиме с включением пересылки порта. Этот пример пересылает порт для клиента Wolfssl на сервер в качестве приложения. Предполагается, что все программы запускаются на одной машине в разных терминалах.
src/wolfssl$ ./examples/server/server
src/wolfssh$ ./examples/portfwd/portfwd -p 22 -u <username>
-f 12345 -t 11111
src/wolfssl$ ./examples/client/client -p 12345
По умолчанию сервер Wolfssl прослушивает порт 11111. Клиент настроен на то, чтобы подключиться к порту 12345. Портфуд входит в систему как пользователь «имя пользователя», открывает слушатель на порте 12345 и подключается к серверу на порту 11111. Пакеты направляются вперед и назад между клиентом и сервером. "Привет, Wolfssl!"
Источник для PortFWD приводит пример того, как настроить и использовать поддержку пересылки порта в Wolfssh.
Echoserver будет обрабатывать локальную и удаленную пересылку портов. Чтобы подключиться к инструменту SSH, используя одну из следующих командных строк. Вы можете запустить любую из командных строк SSH из любого места:
src/wolfssl$ ./examples/server/server
src/wolfssh$ ./examples/echoserver/echoserver
anywhere 1$ ssh -p 22222 -L 12345:localhost:11111 jill@localhost
anywhere 2$ ssh -p 22222 -R 12345:localhost:11111 jill@localhost
src/wolfssl$ ./examples/client/client -p 12345
Это позволит переадресацию порта между клиентом Wolfssl и сервером, как в предыдущем примере.
Wolfssh предоставляет поддержку на стороне сервера и клиента для SFTP версии 3. Это позволяет пользователю настроить зашифрованное соединение для управления файловыми системами.
Чтобы составить Wolfssh с поддержкой SFTP, используйте опцию строительства --enable-sftp или определите WOLFSSH_SFTP :
$ ./configure --enable-sftp
$ make
Для получения полных сведений об использовании API и реализации, пожалуйста, см. Руководство пользователя Wolfssh.
Созданный клиент SFTP находится в примерах Directory/ SFTPClient/ и примере EchoServer действует как сервер SFTP.
src/wolfssh$ ./examples/sftpclient/wolfsftp
Полный список поддерживаемых команд можно увидеть с помощью «справки» после подключения.
wolfSSH sftp> help
Commands :
cd <string> change directory
chmod <mode> <path> change mode
get <remote file> <local file> pulls file(s) from server
ls list current directory
mkdir <dir name> creates new directory on server
put <local file> <remote file> push file(s) to server
pwd list current path
quit exit
rename <old> <new> renames remote file
reget <remote file> <local file> resume pulling file
reput <remote file> <local file> resume pushing file
<crtl + c> interrupt get/put cmd
Примером подключения к другой системе был бы
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
Пример Wolfssh Echoserver теперь может разжечь оболочку для пользователя, пытающегося войти в систему. Это в настоящее время было протестировано только на Linux и MacOS. File echoserver.c должен быть изменен, чтобы получить учетные данные пользователя в обратном вызове аутентификации пользователя, или обратный вызов аутентификации пользователя должен быть изменен, чтобы проверить предоставленный пароль.
Чтобы составить Wolfssh с поддержкой оболочки, используйте вариант строительства --enable-shell или определить WOLFSSH_SHELL :
$ ./configure --enable-shell
$ make
Чтобы попробовать эту функциональность, вы можете использовать пример EchoServer и Client. В терминале сделайте следующее, чтобы запустить сервер:
$ ./examples/echoserver/echoserver -P <user>:junk
А в другом терминале сделайте следующее, чтобы запустить пример клиента:
$ ./examples/client/client -t -u <user> -P junk
Обратите внимание, что <user> должно быть именем пользователя текущего пользователя, который вошел в систему.
По умолчанию эхозервер попытается запустить оболочку. Чтобы использовать поведение тестирования Echo, дайте Echoserver опцию командной строки -f .
$ ./examples/echoserver/echoserver -f
Чтобы использовать функцию оболочки с Wolfsshd добавить --enable-sshd в вашу команду Configure и используйте следующую команду:
$ sudo ./apps/wolfsshd/wolfsshd -D -h keys/gretel-key-ecc.pem -p 11111
Если он жалуется на плохой файл sshd_config , просто скопируйте его в другой файл и удалите строку нарушения, на которую он жалуется, и используйте параметр командной строки -f чтобы указывать на новый файл.
Затем вы можете подключиться к серверу wolfsshd с SSH:
$ ssh <user>@localhost -p 11111
Обратите внимание, что <user> должно быть именем пользователя текущего пользователя, который вошел в систему.
Wolfssh теперь поддерживает Curve25519 для обмена ключами. Чтобы позволить этой поддержке просто компилировать Wolfssl с поддержкой Wolfssh и Curve25519.
$ cd wolfssl
$ ./configure --enable-wolfssh --enable-curve25519
После построения и установки Wolfssl вы можете просто настроить без опций.
$ cd wolfssh
$ ./configure
Клиент и сервер Wolfssh будут автоматически договариваться с помощью Curve25519.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
Wolfssh теперь поддерживает алгоритм пост-кванта ML-DSA (также известный как Кибер). Он использует набор параметров Kyber512 и гибридизуется с ECDHE по кривой P-256 ECC.
Чтобы использовать этот обмен ключом, вы должны построить и установить Wolfssl в свою систему. Вот пример эффективной конфигурации:
$ ./configure --enable-wolfssh --enable-experimental --enable-kyber
После этого просто настройте и создайте Wolfssh, как обычно:
$ ./configure
$ make all
Клиент и сервер Wolfssh автоматически будут обсуждаться с помощью Kyber512, гибридированного с ECDHE по кривой P-256 ECC.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
На стороне клиента вы увидите следующий вывод:
Сервер сказал: Здравствуйте, Wolfssh!
Если вы хотите увидеть взаимодействие с вилкой OpenQuantumSafe Openssh, вы можете построить и выполнять вилку, пока Echoserver работает. Загрузите релиз отсюда:
https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
Следующее достаточно для сборки и исполнения:
$ tar xmvf openssh-OQS-OpenSSH-snapshot-2021-08.tar.gz
$ cd openssh-OQS-OpenSSH-snapshot-2021-08/
$ ./configure --with-liboqs-dir=/usr/local
$ make all
$ ./ssh -o"KexAlgorithms=ecdh-nistp256-kyber-512r3-sha256-d00@openquantumsafe.org"
-o"PubkeyAcceptedAlgorithms +ssh-rsa"
-o"HostkeyAlgorithms +ssh-rsa"
jill@localhost -p 22222
ПРИМЕЧАНИЕ. При запросе введите пароль, который является «Upthehill».
Вы можете ввести линию текста, и когда вы нажимаете Enter, строка будет отозвана обратно. Используйте Ctrl-C, чтобы завершить соединение.
Wolfssh может принять сертификаты X.509 вместо только публичных ключей при аутентификации пользователя.
Чтобы составить Wolfssh с поддержкой X.509, используйте вариант сборки --enable-certs или определить WOLFSSH_CERTS :
$ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
$ make
Для этого примера мы отключаем проверку FPKI, поскольку включенный сертификат для «Fred» не имеет необходимых расширений FPKI. Если флаг wolfssh_no_fpki удален, вы можете увидеть, как сертификат отклоняется.
Чтобы предоставить корневой сертификат CA для проверки сертификата пользователя, дайте EchoServer опцию командной строки -a .
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
У Echoserver и Client есть поддельный пользователь по имени «Fred», сертификат которого будет использоваться для аутентификации.
Примером подключения к EchoServer / Client с использованием примера сертификата Fred-cert.der будет:
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem -K fred:./keys/fred-cert.der
$ ./examples/client/client -u fred -J ./keys/fred-cert.der -i ./keys/fred-key.der
Wolfssh поставляется с демон -сервером и инструментом оболочки командной строки. Проверьте каталог приложений для получения дополнительной информации.