исправление: переход на ключи ed25519 и добавление openssh-keygen в зависимости для обхода ошибки libcrypto

This commit is contained in:
Petro1990 2026-03-13 14:50:09 +03:00
parent 71eacbab89
commit 1365a12d86
2 changed files with 13 additions and 15 deletions

View File

@ -57,6 +57,7 @@ install_pkg() {
} }
install_pkg "openssh-client" install_pkg "openssh-client"
install_pkg "openssh-keygen"
install_pkg "autossh" install_pkg "autossh"
install_pkg "curl" install_pkg "curl"

27
rproxy
View File

@ -8,7 +8,7 @@ CONF_DIR="/opt/etc/rproxy"
CONF_FILE="$CONF_DIR/rproxy.conf" CONF_FILE="$CONF_DIR/rproxy.conf"
SERVICES_DIR="$CONF_DIR/services" SERVICES_DIR="$CONF_DIR/services"
PID_DIR="/opt/var/run/rproxy" PID_DIR="/opt/var/run/rproxy"
SSH_KEY="$CONF_DIR/id_rsa" SSH_KEY="$CONF_DIR/id_ed25519"
REMOTE_NGINX_DIR="/etc/nginx/sites-enabled" REMOTE_NGINX_DIR="/etc/nginx/sites-enabled"
BASE_TUNNEL_PORT=10000 BASE_TUNNEL_PORT=10000
@ -700,30 +700,27 @@ do_setup() {
fi fi
else else
if [ ! -f "$SSH_KEY" ]; then if [ ! -f "$SSH_KEY" ]; then
msg "Генерирую SSH-ключ..." msg "Генерирую SSH-ключ (ed25519)..."
mkdir -p "$CONF_DIR" mkdir -p "$CONF_DIR"
# Предпочтительно используем полный путь к OpenSSH из Entware # Удаляем старые RSA ключи, если они есть (избегаем путаницы)
rm -f "$CONF_DIR/id_rsa" "$CONF_DIR/id_rsa.pub"
local keygen_cmd="/opt/bin/ssh-keygen" local keygen_cmd="/opt/bin/ssh-keygen"
[ ! -f "$keygen_cmd" ] && keygen_cmd="ssh-keygen" [ ! -f "$keygen_cmd" ] && keygen_cmd="ssh-keygen"
# 1. Попытка создания OpenSSH ключа (современный формат) # Создаем современный и компактный ed25519 ключ
if ! $keygen_cmd -t rsa -b 2048 -f "$SSH_KEY" -N "" -q 2>/dev/null; then # Он лучше всего совместим между OpenSSH и Dropbear
# 2. Попытка для Dropbear (флаг -s вместо -b) if ! $keygen_cmd -t ed25519 -f "$SSH_KEY" -N "" -q 2>/dev/null; then
if ! $keygen_cmd -t rsa -s 2048 -f "$SSH_KEY" -N "" 2>/dev/null; then # Танцы с бубном для старых версий
# 3. Минимально возможный набор флагов $keygen_cmd -t ed25519 -f "$SSH_KEY" -N ""
$keygen_cmd -t rsa -f "$SSH_KEY" -N ""
fi
fi fi
# Извлекаем публичный ключ, если он не создался (особенности Dropbear) # Извлекаем публичный ключ, если он не создался
if [ ! -f "$SSH_KEY.pub" ] && [ -f "$SSH_KEY" ]; then if [ ! -f "$SSH_KEY.pub" ] && [ -f "$SSH_KEY" ]; then
# Dropbear -y может выводить лишний текст, берем только строку начинающуюся с ssh-rsa $keygen_cmd -y -f "$SSH_KEY" 2>/dev/null | grep "^ssh-ed25519" > "$SSH_KEY.pub"
$keygen_cmd -y -f "$SSH_KEY" 2>/dev/null | grep "^ssh-rsa" > "$SSH_KEY.pub"
fi fi
# Проверка формата: если ключ Dropbear, а клиент OpenSSH — может потребоваться конвертация
# Но обычно если мы в Entware, /opt/bin/ssh должен понимать PEM
if [ -f "$SSH_KEY" ]; then if [ -f "$SSH_KEY" ]; then
chmod 600 "$SSH_KEY" chmod 600 "$SSH_KEY"
msg "Ключ создан: $SSH_KEY" msg "Ключ создан: $SSH_KEY"