From 1365a12d8686b0f4860ef54e43984c9868daef59 Mon Sep 17 00:00:00 2001 From: Petro1990 Date: Fri, 13 Mar 2026 14:50:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5:=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=BD=D0=B0=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B8=20?= =?UTF-8?q?ed25519=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20openssh-keygen=20=D0=B2=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=D0=B0=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20libcrypto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 1 + rproxy | 27 ++++++++++++--------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/install.sh b/install.sh index ff21516..6364508 100644 --- a/install.sh +++ b/install.sh @@ -57,6 +57,7 @@ install_pkg() { } install_pkg "openssh-client" +install_pkg "openssh-keygen" install_pkg "autossh" install_pkg "curl" diff --git a/rproxy b/rproxy index c6ae461..4c7750e 100644 --- a/rproxy +++ b/rproxy @@ -8,7 +8,7 @@ CONF_DIR="/opt/etc/rproxy" CONF_FILE="$CONF_DIR/rproxy.conf" SERVICES_DIR="$CONF_DIR/services" 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" BASE_TUNNEL_PORT=10000 @@ -700,30 +700,27 @@ do_setup() { fi else if [ ! -f "$SSH_KEY" ]; then - msg "Генерирую SSH-ключ..." + msg "Генерирую SSH-ключ (ed25519)..." 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" [ ! -f "$keygen_cmd" ] && keygen_cmd="ssh-keygen" - # 1. Попытка создания OpenSSH ключа (современный формат) - if ! $keygen_cmd -t rsa -b 2048 -f "$SSH_KEY" -N "" -q 2>/dev/null; then - # 2. Попытка для Dropbear (флаг -s вместо -b) - if ! $keygen_cmd -t rsa -s 2048 -f "$SSH_KEY" -N "" 2>/dev/null; then - # 3. Минимально возможный набор флагов - $keygen_cmd -t rsa -f "$SSH_KEY" -N "" - fi + # Создаем современный и компактный ed25519 ключ + # Он лучше всего совместим между OpenSSH и Dropbear + if ! $keygen_cmd -t ed25519 -f "$SSH_KEY" -N "" -q 2>/dev/null; then + # Танцы с бубном для старых версий + $keygen_cmd -t ed25519 -f "$SSH_KEY" -N "" fi - # Извлекаем публичный ключ, если он не создался (особенности Dropbear) + # Извлекаем публичный ключ, если он не создался if [ ! -f "$SSH_KEY.pub" ] && [ -f "$SSH_KEY" ]; then - # Dropbear -y может выводить лишний текст, берем только строку начинающуюся с ssh-rsa - $keygen_cmd -y -f "$SSH_KEY" 2>/dev/null | grep "^ssh-rsa" > "$SSH_KEY.pub" + $keygen_cmd -y -f "$SSH_KEY" 2>/dev/null | grep "^ssh-ed25519" > "$SSH_KEY.pub" fi - # Проверка формата: если ключ Dropbear, а клиент OpenSSH — может потребоваться конвертация - # Но обычно если мы в Entware, /opt/bin/ssh должен понимать PEM if [ -f "$SSH_KEY" ]; then chmod 600 "$SSH_KEY" msg "Ключ создан: $SSH_KEY"