Enable SSH for Windows and Android peers (#532)

* Enable SSH for Windows and Android peers, hide update badge for temporary peers

* Fix RDP to use tcp protocol instead of netbird-ssh
This commit is contained in:
Viktor Liu
2026-01-19 16:49:08 +08:00
committed by GitHub
parent 54ef076303
commit 04e22a3c7e
4 changed files with 7 additions and 10 deletions

View File

@@ -20,7 +20,6 @@ import {
useNetBirdClient, useNetBirdClient,
} from "@/modules/remote-access/useNetBirdClient"; } from "@/modules/remote-access/useNetBirdClient";
import { cn } from "@utils/helpers"; import { cn } from "@utils/helpers";
import { isNetbirdSSHProtocolSupported } from "@utils/version";
export default function RDPPage() { export default function RDPPage() {
const { peerId } = useRDPQueryParams(); const { peerId } = useRDPQueryParams();
@@ -85,11 +84,8 @@ function RDPSession({ peer }: Props) {
try { try {
setCredentials(rdpCredentials); setCredentials(rdpCredentials);
setIsNetBirdConnecting(true); setIsNetBirdConnecting(true);
const protocol = isNetbirdSSHProtocolSupported(peer.version)
? "netbird-ssh"
: "tcp";
await client.connectTemporary(peer.id, [ await client.connectTemporary(peer.id, [
`${protocol}/${rdpCredentials.port}`, `tcp/${rdpCredentials.port}`,
]); ]);
setIsNetBirdConnecting(false); setIsNetBirdConnecting(false);
} catch (error) { } catch (error) {

View File

@@ -20,11 +20,13 @@ type Props = {
version: string; version: string;
os: string; os: string;
serial?: string; serial?: string;
ephemeral?: boolean;
}; };
export default function PeerVersionCell({ version, os, serial }: Props) { export default function PeerVersionCell({ version, os, serial, ephemeral }: Props) {
const { latestVersion, latestUrl } = useApplicationContext(); const { latestVersion, latestUrl } = useApplicationContext();
const updateAvailable = useMemo(() => { const updateAvailable = useMemo(() => {
if (ephemeral) return false;
const operatingSystem = getOperatingSystem(os); const operatingSystem = getOperatingSystem(os);
if ( if (
operatingSystem === OperatingSystem.IOS || operatingSystem === OperatingSystem.IOS ||
@@ -33,7 +35,7 @@ export default function PeerVersionCell({ version, os, serial }: Props) {
return false; return false;
if (!latestVersion) return false; if (!latestVersion) return false;
return !compareVersions(version, latestVersion); return !compareVersions(version, latestVersion);
}, [os, version, latestVersion]); }, [os, version, latestVersion, ephemeral]);
const updateIcon = useMemo(() => { const updateIcon = useMemo(() => {
return <ArrowUpCircleIcon size={15} className={"text-netbird"} />; return <ArrowUpCircleIcon size={15} className={"text-netbird"} />;

View File

@@ -170,6 +170,7 @@ const PeersTableColumns: ColumnDef<Peer>[] = [
version={row.original.version} version={row.original.version}
os={row.original.os} os={row.original.os}
serial={row.original.serial_number} serial={row.original.serial_number}
ephemeral={row.original.ephemeral}
/> />
), ),
}, },

View File

@@ -26,9 +26,7 @@ export const SSHButton = ({ peer, isDropdown = false }: Props) => {
const hasPermission = permission.peers.update; const hasPermission = permission.peers.update;
const os = getOperatingSystem(peer?.os); const os = getOperatingSystem(peer?.os);
const isWindows = os === OperatingSystem.WINDOWS; const isSSHSupported = os !== OperatingSystem.IOS;
const isMobile = os === OperatingSystem.ANDROID || os === OperatingSystem.IOS;
const isSSHSupported = !isWindows && !isMobile;
return ( return (
isSSHSupported && ( isSSHSupported && (