From 837bf2a4e48a08a88f5f3780ff886b5d011642a7 Mon Sep 17 00:00:00 2001 From: irving ou Date: Fri, 19 Dec 2025 15:49:59 -0500 Subject: [PATCH] feat(webapp): update SSH package with deprecated algorithm and keyboard interactive auth support - Update @devolutions/web-ssh-gui from 0.4.0 to 0.6.2 - Add Keyboard_Interactive authentication mode for SSH - Remove custom host key verification callback (now handled by library) - Library now emits connected status earlier to prevent deadlock with host key verification --- webapp/apps/gateway-ui/package.json | 2 +- .../form-components/ssh/ssh-form.component.ts | 2 ++ .../ssh/web-client-ssh.component.ts | 3 --- .../shared/enums/web-client-auth-mode.enum.ts | 1 + webapp/pnpm-lock.yaml | 20 +++++++++---------- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/webapp/apps/gateway-ui/package.json b/webapp/apps/gateway-ui/package.json index e2091343e..6857cf32b 100644 --- a/webapp/apps/gateway-ui/package.json +++ b/webapp/apps/gateway-ui/package.json @@ -31,7 +31,7 @@ "@devolutions/iron-remote-desktop-rdp": "^0.6.1", "@devolutions/iron-remote-desktop-vnc": "^0.7.0", "@devolutions/terminal-shared": "^1.4.0", - "@devolutions/web-ssh-gui": "^0.4.0", + "@devolutions/web-ssh-gui": "^0.6.2", "@devolutions/web-telnet-gui": "^0.4.0", "@xterm/addon-clipboard": "^0.1.0", "@xterm/xterm": "^5.5.0", diff --git a/webapp/apps/gateway-ui/src/client/app/modules/web-client/form/form-components/ssh/ssh-form.component.ts b/webapp/apps/gateway-ui/src/client/app/modules/web-client/form/form-components/ssh/ssh-form.component.ts index 48f96df80..d059f2249 100644 --- a/webapp/apps/gateway-ui/src/client/app/modules/web-client/form/form-components/ssh/ssh-form.component.ts +++ b/webapp/apps/gateway-ui/src/client/app/modules/web-client/form/form-components/ssh/ssh-form.component.ts @@ -113,6 +113,8 @@ export class SshFormComponent extends BaseComponent implements OnInit, OnDestroy visibility.showPasswordInput = authModeAsNumber === SshAuthMode.Username_and_Password; visibility.showPrivateKeyInput = authModeAsNumber === SshAuthMode.Private_Key; + + // Keyboard_Interactive only requires username - the SSH library handles the rest }), map(() => { return authMode; diff --git a/webapp/apps/gateway-ui/src/client/app/modules/web-client/ssh/web-client-ssh.component.ts b/webapp/apps/gateway-ui/src/client/app/modules/web-client/ssh/web-client-ssh.component.ts index 23f5e1f55..6db87d38e 100644 --- a/webapp/apps/gateway-ui/src/client/app/modules/web-client/ssh/web-client-ssh.component.ts +++ b/webapp/apps/gateway-ui/src/client/app/modules/web-client/ssh/web-client-ssh.component.ts @@ -176,9 +176,6 @@ export class WebClientSshComponent extends WebClientBaseComponent implements Web passpharse: connectionParameters.privateKeyPassphrase ?? '', privateKey: connectionParameters.privateKey ?? '', password: connectionParameters.password ?? '', - onHostKeyReceived: (_serverName, _fingerprint) => { - return Promise.resolve(true); - }, }), ).pipe(catchError((error) => throwError(error))); } diff --git a/webapp/apps/gateway-ui/src/client/app/shared/enums/web-client-auth-mode.enum.ts b/webapp/apps/gateway-ui/src/client/app/shared/enums/web-client-auth-mode.enum.ts index a5855dee8..4a4d56023 100644 --- a/webapp/apps/gateway-ui/src/client/app/shared/enums/web-client-auth-mode.enum.ts +++ b/webapp/apps/gateway-ui/src/client/app/shared/enums/web-client-auth-mode.enum.ts @@ -9,6 +9,7 @@ export enum VncAuthMode { export enum SshAuthMode { Username_and_Password = 0, //default Private_Key = 1, + Keyboard_Interactive = 2, } namespace WebClientAuthMode { diff --git a/webapp/pnpm-lock.yaml b/webapp/pnpm-lock.yaml index f4eeff72a..d321e89d0 100644 --- a/webapp/pnpm-lock.yaml +++ b/webapp/pnpm-lock.yaml @@ -57,8 +57,8 @@ importers: specifier: ^1.4.0 version: 1.4.0(typescript@5.5.4) '@devolutions/web-ssh-gui': - specifier: ^0.4.0 - version: 0.4.3(@devolutions/terminal-shared@1.4.0(typescript@5.5.4)) + specifier: ^0.6.2 + version: 0.6.2(@devolutions/terminal-shared@1.4.0(typescript@5.5.4)) '@devolutions/web-telnet-gui': specifier: ^0.4.0 version: 0.4.0(@devolutions/terminal-shared@1.4.0(typescript@5.5.4)) @@ -1238,24 +1238,24 @@ packages: optional: true '@devolutions/iron-remote-desktop-rdp@0.6.1': - resolution: {integrity: sha512-f5QgznYioXqEeGSZXoTdmGHH9VVIzGRjFuL745B5VRCyGolrromxmQeHO9Gxy5zDAvl9z4/FL26SqDrm/f47aw==} + resolution: {integrity: sha512-f5QgznYioXqEeGSZXoTdmGHH9VVIzGRjFuL745B5VRCyGolrromxmQeHO9Gxy5zDAvl9z4/FL26SqDrm/f47aw==, tarball: https://devolutions.jfrog.io/artifactory/api/npm/npm/@devolutions/iron-remote-desktop-rdp/-/iron-remote-desktop-rdp-0.6.1.tgz} '@devolutions/iron-remote-desktop-vnc@0.7.0': - resolution: {integrity: sha512-fdxwJuBytLTdxrm6GrJ4po5ZI0bWP+yKNo4TZhKNRqkbRsUNOoqEK+9U1VwPYRlrTkrDryR57xeHRpxg/tDbOQ==, tarball: https://devolutions.jfrog.io/artifactory/api/npm/npm/@devolutions/iron-remote-desktop-vnc/-/@devolutions/iron-remote-desktop-vnc-0.7.0.tgz} + resolution: {integrity: sha512-fdxwJuBytLTdxrm6GrJ4po5ZI0bWP+yKNo4TZhKNRqkbRsUNOoqEK+9U1VwPYRlrTkrDryR57xeHRpxg/tDbOQ==, tarball: https://devolutions.jfrog.io/devolutions/api/npm/npm/@devolutions/iron-remote-desktop-vnc/-/@devolutions/iron-remote-desktop-vnc-0.7.0.tgz} '@devolutions/iron-remote-desktop@0.10.1': - resolution: {integrity: sha512-VwY71hnlxnVc/ueZ8IYwV12VPcAvbI5fVa/HpKY1fDcok91QydbUsvMkdg4UPckqe2eDDKRXzeJntwf9db5xaA==} + resolution: {integrity: sha512-VwY71hnlxnVc/ueZ8IYwV12VPcAvbI5fVa/HpKY1fDcok91QydbUsvMkdg4UPckqe2eDDKRXzeJntwf9db5xaA==, tarball: https://devolutions.jfrog.io/artifactory/api/npm/npm/@devolutions/iron-remote-desktop/-/iron-remote-desktop-0.10.1.tgz} '@devolutions/terminal-shared@1.4.0': - resolution: {integrity: sha512-K+Kxux4vzqjevxvmCt4ChrcwSyvZrDRLKLZ8Gsol/c67oPkpA7l7fTD3VOiUb4KntUDRQdSZxRcNsMHFobhRLw==, tarball: https://devolutions.jfrog.io/artifactory/api/npm/npm/@devolutions/terminal-shared/-/@devolutions/terminal-shared-1.4.0.tgz} + resolution: {integrity: sha512-K+Kxux4vzqjevxvmCt4ChrcwSyvZrDRLKLZ8Gsol/c67oPkpA7l7fTD3VOiUb4KntUDRQdSZxRcNsMHFobhRLw==, tarball: https://devolutions.jfrog.io/devolutions/api/npm/npm/@devolutions/terminal-shared/-/@devolutions/terminal-shared-1.4.0.tgz} - '@devolutions/web-ssh-gui@0.4.3': - resolution: {integrity: sha512-S2+dygS9LtUzNV5PDU98kyhtQMaVzSKBjqy+MYTvkAm1YDR81wq0i4lKeRhf0NanGhKKl1cCnb2L7XdVtLESDQ==, tarball: https://devolutions.jfrog.io/artifactory/api/npm/npm/@devolutions/web-ssh-gui/-/@devolutions/web-ssh-gui-0.4.3.tgz} + '@devolutions/web-ssh-gui@0.6.2': + resolution: {integrity: sha512-XozKoGTYwxEksJhWrQuVc+LmGh6NUVm/RGi+GegSPeMQk8nU+9UgkOq3gv5gEYdho8H8dkWWEo7JLdF0Ee3rjw==, tarball: https://devolutions.jfrog.io/devolutions/api/npm/npm/@devolutions/web-ssh-gui/-/@devolutions/web-ssh-gui-0.6.2.tgz} peerDependencies: '@devolutions/terminal-shared': ~1.4.0 '@devolutions/web-telnet-gui@0.4.0': - resolution: {integrity: sha512-zRk8Y1wSmK5HLYT0Hs6TIGcrKrr8gQ4aE+hFH8lDFapHk4IgTtQBvtGF5pTq+gozIADg0ihn6GRks/SdqX/45g==, tarball: https://devolutions.jfrog.io/artifactory/api/npm/npm/@devolutions/web-telnet-gui/-/@devolutions/web-telnet-gui-0.4.0.tgz} + resolution: {integrity: sha512-zRk8Y1wSmK5HLYT0Hs6TIGcrKrr8gQ4aE+hFH8lDFapHk4IgTtQBvtGF5pTq+gozIADg0ihn6GRks/SdqX/45g==, tarball: https://devolutions.jfrog.io/devolutions/api/npm/npm/@devolutions/web-telnet-gui/-/@devolutions/web-telnet-gui-0.4.0.tgz} peerDependencies: '@devolutions/terminal-shared': ~1.4.0 @@ -7972,7 +7972,7 @@ snapshots: transitivePeerDependencies: - typescript - '@devolutions/web-ssh-gui@0.4.3(@devolutions/terminal-shared@1.4.0(typescript@5.5.4))': + '@devolutions/web-ssh-gui@0.6.2(@devolutions/terminal-shared@1.4.0(typescript@5.5.4))': dependencies: '@devolutions/terminal-shared': 1.4.0(typescript@5.5.4) '@types/jquery': 3.5.33