исправление: совместимость ssh-keygen с Dropbear и фикс создания и копирования публичного ключа

This commit is contained in:
Petro1990 2026-03-13 14:43:48 +03:00
parent 0eca85b1a2
commit f37d77656c
1 changed files with 29 additions and 4 deletions

33
rproxy
View File

@ -689,8 +689,28 @@ do_setup() {
if [ ! -f "$SSH_KEY" ]; then if [ ! -f "$SSH_KEY" ]; then
msg "Генерирую SSH-ключ..." msg "Генерирую SSH-ключ..."
mkdir -p "$CONF_DIR" mkdir -p "$CONF_DIR"
ssh-keygen -t rsa -b 4096 -f "$SSH_KEY" -N "" -q # Попытка с универсальными параметрами
msg "Ключ создан: $SSH_KEY" if ! ssh-keygen -t rsa -b 2048 -f "$SSH_KEY" -N "" -q 2>/dev/null; then
# Попытка для Dropbear (использует -s вместо -b)
if ! ssh-keygen -t rsa -s 2048 -f "$SSH_KEY" -N "" 2>/dev/null; then
# Минимальный набор флагов
ssh-keygen -t rsa -f "$SSH_KEY" -N ""
fi
fi
# Если .pub файл не создался автоматически (бывает в Dropbear), извлекаем его
if [ ! -f "$SSH_KEY.pub" ] && [ -f "$SSH_KEY" ]; then
ssh-keygen -y -f "$SSH_KEY" > "$SSH_KEY.pub" 2>/dev/null
fi
if [ -f "$SSH_KEY" ]; then
chmod 600 "$SSH_KEY"
msg "Ключ создан: $SSH_KEY"
else
err "Не удалось создать SSH-ключ"
pause
return
fi
fi fi
fi fi
@ -706,10 +726,15 @@ do_setup() {
fi fi
else else
msg "Копирую SSH-ключ на VPS..." msg "Копирую SSH-ключ на VPS..."
if [ ! -f "$SSH_KEY.pub" ]; then
err "Публичный ключ не найден: $SSH_KEY.pub"
pause
return
fi
printf " Введите пароль VPS для копирования ключа:\n" printf " Введите пароль VPS для копирования ключа:\n"
ssh-copy-id -i "$SSH_KEY.pub" -p "$vps_port" "$vps_user@$vps_host" 2>/dev/null || { ssh-copy-id -i "$SSH_KEY.pub" -p "$vps_port" "$vps_user@$vps_host" 2>/dev/null || {
cat "$SSH_KEY.pub" | ssh -p "$vps_port" "$vps_user@$vps_host" \ cat "$SSH_KEY.pub" | ssh -o StrictHostKeyChecking=no -p "$vps_port" "$vps_user@$vps_host" \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
} }
if ! ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 \ if ! ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 \