Мне давно хотелось разобраться в работе протокола SSH, однако, это казалось очень сложной задачей, поэтому тогда я ограничился написанием клиента для древнего протокола telnet. Теперь же я решил разобраться в базовых принципах криптографии и накодить полноценный SSH-клиент под OpenComputers с нуля, включая все криптографичиские алгоритмы.
Установить программу в OpenOS можно командой
wget -f https://raw.githubusercontent.com/Smok1e/oc-ssh/refs/heads/master/installer.lua /tmp/get-ssh.lua && /tmp/get-ssh.lua
Использование программы схоже с клентом OpenSSH. Для подключения к удаленному терминалу достаточно написать ssh user@address. Разумеется, можно сменить порт или включить логирование:
Usage: ssh [OPTIONS] destination [COMMAND]
Available options:
-h, --help: Print usage information and exit
-v, --verbose: Enable debug logging
--port=<port>: Override port
Клиент поддерживает авторизацию по ключу. На данный момент из алгоритмов цифровой подписи реализован только Ed25519. Чтобы сгенерировать пару ключей, используйте команду ssh-keygen. По дефолту она запишет пару ключей в директорию /home/.ssh под названиями id_ed25519 и id_ed25519.pub. Публичный ключ соответствует формату OpenSSH и его можно спокойно вписать в конец файла ~/.ssh/authorized_keys на удалённой машине.
Приватный ключ, однако, не совместим с OpenSSH, поэтому скопировать имеющийся приватный ключ, сгенерированный OpenSSH, в OpenOS, не получится.
По аналогии с OpenSSH можно также создать файл конфигурации /home/.ssh/config. В нем можно прописать хосты для быстрого подключения в следующем формате:
{
Host = {
address = "192.168.1.128",
port = 122,
user = "smok1e",
identity = /path/to/private/key
}
}
, после чего к нему можно будет подключиться командой ssh Host. Все поля в файле конфигурации, кроме адреса, опциональны. Если поле встречается как в конфиге, так и в опциях командной строки, например, порт, приоритет будет отдаваться опции командной строки.
На данный момент реализованы следующие криптографические алгоритмы:
X25519 для обмена ключами по Диффи-Хеллману
Ed25519 для цифровой подписи при проверке хоста и авторизации по ключу
AES128/192/256 в режиме CTR для шифрования между клиентом и сервером
HMAC-SHA2-224/256/384/512 для проверки подленности сообщений
Алгоритм сжатия не предусмотрен.
Хотя текущая реализация самого протокола SSH вполне достаточна для полноценной работы с удаленным терминалом, сам эмулятор терминала допилен не до конца. Разумеется, функционала встроенной в OpenOS библиотеки term.lua недостаточно для корректной обработки большинства современных консольных программ. По-хорошему необходима полноценная реализация xterm-совместимого терминала. Проблема в том, что как такового стандарта, описывающего все escape-последовательности, которые должен обрабатывать терминал, называющий себя xterm-ом, не существует. Более того, существует невообразимое количетво различных надстроек и модификаций, усложняющих разработку в разы.
Пока что реализована только базовая обработка escape-последовательностей по типу перемещения курсора и установки цвета текста, в связи с чем не все программы могут отображаться корректно.