fix(pve): Fix connection issues and add more error handlings (#1081)

* feat(PVE): Added display of PVE connection loading steps

Added a detailed display of loading steps during the PVE connection process, including stages such as establishing an SSH tunnel, authentication, and data retrieval

Also optimized the sorting of PVE storage content and the logic for handling connection errors

* feat(pve): Added error handling and prompts for PVE two-factor authentication

Added error handling for PVE servers when two-factor authentication is enabled, along with relevant error types and localized prompts

* feat(PVE): Added support for PVE passwords during key-based authentication

- Added the `pvePwd` field to the `ServerCustom` model
- Added a PVE password input field to the edit page (displayed only during key-based authentication)
- Updated multilingual files to support PVE-related loading states and password prompts
- Optimized PVE connection logic to support password verification during key-based authentication
This commit is contained in:
GT610
2026-03-22 16:25:48 +08:00
committed by GitHub
parent 2f67938b09
commit 09431a0b08
37 changed files with 641 additions and 139 deletions

View File

@@ -1050,12 +1050,54 @@ abstract class AppLocalizations {
/// **'Login failed. Unable to authenticate with username/password from server configuration for Linux PAM login.'**
String get pveLoginFailed;
/// No description provided for @pveOtpRequired.
///
/// In en, this message translates to:
/// **'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.'**
String get pveOtpRequired;
/// No description provided for @pveVersionLow.
///
/// In en, this message translates to:
/// **'This feature is currently in the testing phase and has only been tested on PVE 8+. Please use it with caution.'**
String get pveVersionLow;
/// No description provided for @pveLoadingForwarding.
///
/// In en, this message translates to:
/// **'Establishing SSH tunnel...'**
String get pveLoadingForwarding;
/// No description provided for @pveLoadingLogin.
///
/// In en, this message translates to:
/// **'Authenticating with PVE...'**
String get pveLoadingLogin;
/// No description provided for @pveLoadingData.
///
/// In en, this message translates to:
/// **'Fetching cluster data...'**
String get pveLoadingData;
/// No description provided for @pveLoadingConnect.
///
/// In en, this message translates to:
/// **'Connecting...'**
String get pveLoadingConnect;
/// No description provided for @pvePassword.
///
/// In en, this message translates to:
/// **'PVE Password'**
String get pvePassword;
/// No description provided for @pvePasswordHint.
///
/// In en, this message translates to:
/// **'Required when using key-based SSH authentication'**
String get pvePasswordHint;
/// No description provided for @read.
///
/// In en, this message translates to:

View File

@@ -538,10 +538,33 @@ class AppLocalizationsDe extends AppLocalizations {
String get pveLoginFailed =>
'Anmeldung fehlgeschlagen. Kann nicht mit Benutzername/Passwort aus der Serverkonfiguration angemeldet werden, um sich über Linux PAM anzumelden.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Diese Funktion befindet sich derzeit in der Testphase und wurde nur auf PVE 8+ getestet. Bitte verwenden Sie sie mit Vorsicht.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Lesen';

View File

@@ -535,10 +535,33 @@ class AppLocalizationsEn extends AppLocalizations {
String get pveLoginFailed =>
'Login failed. Unable to authenticate with username/password from server configuration for Linux PAM login.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'This feature is currently in the testing phase and has only been tested on PVE 8+. Please use it with caution.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Read';

View File

@@ -540,10 +540,33 @@ class AppLocalizationsEs extends AppLocalizations {
String get pveLoginFailed =>
'Fallo al iniciar sesión. No se puede autenticar con el nombre de usuario/contraseña de la configuración del servidor para el inicio de sesión de Linux PAM.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Esta función está actualmente en fase de prueba y solo se ha probado en PVE 8+. Úsela con precaución.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Leer';

View File

@@ -542,10 +542,33 @@ class AppLocalizationsFr extends AppLocalizations {
String get pveLoginFailed =>
'Échec de la connexion. Impossible d\'authentifier avec le nom d\'utilisateur / mot de passe de la configuration du serveur pour la connexion Linux PAM.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Cette fonctionnalité est actuellement en phase de test et n\'a été testée que sur PVE 8+. Veuillez l\'utiliser avec prudence.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Lire';

View File

@@ -535,10 +535,33 @@ class AppLocalizationsId extends AppLocalizations {
String get pveLoginFailed =>
'Login gagal. Tidak dapat mengautentikasi dengan nama pengguna/kata sandi dari konfigurasi server untuk login Linux PAM.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Fitur ini saat ini sedang dalam tahap pengujian dan hanya diuji pada PVE 8+. Gunakan dengan hati-hati.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Baca';

View File

@@ -536,10 +536,33 @@ class AppLocalizationsIt extends AppLocalizations {
String get pveLoginFailed =>
'Accesso fallito. Impossibile autenticarsi con nome utente/password dalla configurazione del server per l\'accesso Linux PAM.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Questa funzionalità è attualmente nella fase di test ed è stata testata solo su PVE 8+. Usala con cautela.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Leggi';

View File

@@ -517,9 +517,32 @@ class AppLocalizationsJa extends AppLocalizations {
String get pveLoginFailed =>
'ログインに失敗しました。Linux PAMログインのためにサーバー構成からのユーザー名/パスワードで認証できません。';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow => 'この機能は現在テスト段階にあり、PVE 8+でのみテストされています。ご利用の際は慎重に。';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => '読み取り';

View File

@@ -514,10 +514,33 @@ class AppLocalizationsKo extends AppLocalizations {
String get pveLoginFailed =>
'로그인에 실패했습니다. 서버 설정의 사용자 이름/비밀번호로 Linux PAM 인증을 할 수 없습니다.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'이 기능은 현재 테스트 단계이며 PVE 8+에서만 테스트되었습니다. 주의하여 사용해 주세요.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => '읽기';

View File

@@ -537,10 +537,33 @@ class AppLocalizationsNl extends AppLocalizations {
String get pveLoginFailed =>
'Aanmelden mislukt. Kan niet authenticeren met gebruikersnaam/wachtwoord van serverconfiguratie voor Linux PAM-login.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Deze functie bevindt zich momenteel in de testfase en is alleen getest op PVE 8+. Gebruik het met voorzichtigheid.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Lezen';

View File

@@ -535,10 +535,33 @@ class AppLocalizationsPt extends AppLocalizations {
String get pveLoginFailed =>
'Falha no login. Não é possível autenticar com o nome de usuário/senha da configuração do servidor para login no Linux PAM.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Esta funcionalidade está atualmente em fase de teste e foi testada apenas no PVE 8+. Por favor, use com cautela.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Leitura';

View File

@@ -538,10 +538,33 @@ class AppLocalizationsRu extends AppLocalizations {
String get pveLoginFailed =>
'Ошибка входа. Невозможно аутентифицироваться с помощью имени пользователя/пароля из конфигурации сервера для входа в Linux PAM.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Эта функция в настоящее время находится на стадии тестирования и была протестирована только на PVE 8+. Используйте ее с осторожностью.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Чтение';

View File

@@ -535,10 +535,33 @@ class AppLocalizationsTr extends AppLocalizations {
String get pveLoginFailed =>
'Giriş başarısız. Linux PAM girişi için sunucu yapılandırmasındaki kullanıcı adı/şifre ile kimlik doğrulama yapılamadı.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Bu özellik şu anda test aşamasında ve yalnızca PVE 8+ üzerinde test edildi. Lütfen dikkatli kullanın.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Oku';

View File

@@ -539,10 +539,33 @@ class AppLocalizationsUk extends AppLocalizations {
String get pveLoginFailed =>
'Не вдалося увійти. Неможливо пройти аутентифікацію за допомогою імені користувача/пароля з конфігурації сервера для входу Linux PAM.';
@override
String get pveOtpRequired =>
'Two-factor authentication is enabled on this PVE server. Please enter the OTP code.';
@override
String get pveVersionLow =>
'Ця функція наразі перебуває на стадії тестування та випробувалася лише на PVE 8+. Будь ласка, використовуйте її з обережністю.';
@override
String get pveLoadingForwarding => 'Establishing SSH tunnel...';
@override
String get pveLoadingLogin => 'Authenticating with PVE...';
@override
String get pveLoadingData => 'Fetching cluster data...';
@override
String get pveLoadingConnect => 'Connecting...';
@override
String get pvePassword => 'PVE Password';
@override
String get pvePasswordHint =>
'Required when using key-based SSH authentication';
@override
String get read => 'Читати';

View File

@@ -506,9 +506,30 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get pveLoginFailed => '登录失败。无法使用服务器配置中的用户名或密码通过 Linux PAM 方式认证。';
@override
String get pveOtpRequired => '此 PVE 服务器已启用双因素认证,请输入 OTP 验证码。';
@override
String get pveVersionLow => '当前该功能处于测试阶段,仅在 PVE 8+ 上测试过,请谨慎使用';
@override
String get pveLoadingForwarding => '正在建立 SSH 隧道...';
@override
String get pveLoadingLogin => '正在认证 PVE...';
@override
String get pveLoadingData => '正在获取集群数据...';
@override
String get pveLoadingConnect => '正在连接...';
@override
String get pvePassword => 'PVE 密码';
@override
String get pvePasswordHint => '使用密钥认证时需要填写';
@override
String get read => '';
@@ -1315,9 +1336,30 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
@override
String get pveLoginFailed => '登入失敗。無法使用伺服器設定中的使用者名稱或密碼透過 Linux PAM 方式認證。';
@override
String get pveOtpRequired => '此 PVE 伺服器已啟用雙因素認證,請輸入 OTP 驗證碼。';
@override
String get pveVersionLow => '此功能目前處於測試階段,僅在 PVE 8+ 上進行過測試。請謹慎使用。';
@override
String get pveLoadingForwarding => '正在建立 SSH 隧道...';
@override
String get pveLoadingLogin => '正在認證 PVE...';
@override
String get pveLoadingData => '正在獲取集群數據...';
@override
String get pveLoadingConnect => '正在連接...';
@override
String get pvePassword => 'PVE 密碼';
@override
String get pvePasswordHint => '使用密鑰認證時需要填寫';
@override
String get read => '讀取';