From 71099f09b616eb60bbc71e8507582d17d597af9e Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Thu, 5 Jun 2025 17:40:39 +0100 Subject: [PATCH] FUCK YES weve got ssh!!! --- ShhShell.xcodeproj/project.pbxproj | 14 +++++- ShhShell/SSHHandler.swift | 74 +++++++++++++++++------------- ShhShell/Views/ContentView.swift | 1 - 3 files changed, 53 insertions(+), 36 deletions(-) diff --git a/ShhShell.xcodeproj/project.pbxproj b/ShhShell.xcodeproj/project.pbxproj index 2e82879..6e1cdf5 100644 --- a/ShhShell.xcodeproj/project.pbxproj +++ b/ShhShell.xcodeproj/project.pbxproj @@ -7,13 +7,16 @@ objects = { /* Begin PBXBuildFile section */ + A9083DE22DF1F5D80042906E /* SSH.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A92D6A102DF1BC590031755A /* SSH.framework */; }; + A9083DE32DF1F5D80042906E /* SSH.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A92D6A102DF1BC590031755A /* SSH.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A9083DF72DF1F61F0042906E /* openssl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9083DF62DF1F61F0042906E /* openssl.xcframework */; }; + A9083DF82DF1F61F0042906E /* openssl.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A9083DF62DF1F61F0042906E /* openssl.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; A92538C82DEE0742007E0A18 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92538C52DEE0742007E0A18 /* ContentView.swift */; }; A92538C92DEE0742007E0A18 /* ShhShellApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92538C62DEE0742007E0A18 /* ShhShellApp.swift */; }; A92538CA2DEE0742007E0A18 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A92538C42DEE0742007E0A18 /* Assets.xcassets */; }; A92538CD2DEE0744007E0A18 /* ShhShellTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92538CB2DEE0744007E0A18 /* ShhShellTests.swift */; }; A92538D12DEE0745007E0A18 /* ShhShellUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92538CE2DEE0745007E0A18 /* ShhShellUITests.swift */; }; A92538D22DEE0745007E0A18 /* ShhShellUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92538CF2DEE0745007E0A18 /* ShhShellUITestsLaunchTests.swift */; }; - A92D6A2F2DF1BC720031755A /* SSH.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A92D6A102DF1BC590031755A /* SSH.framework */; }; A9C897DF2DF1A1C900EF9A5F /* NMSSH.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A9C897DC2DF1A1C200EF9A5F /* NMSSH.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; A9C897EB2DF1A95F00EF9A5F /* NMSSH.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9C897E92DF1A53B00EF9A5F /* NMSSH.framework */; }; A9C897EF2DF1A9A400EF9A5F /* SSHHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C897EE2DF1A9A400EF9A5F /* SSHHandler.swift */; }; @@ -59,6 +62,8 @@ dstSubfolderSpec = 10; files = ( A9C897DF2DF1A1C900EF9A5F /* NMSSH.framework in Embed Frameworks */, + A9083DE32DF1F5D80042906E /* SSH.framework in Embed Frameworks */, + A9083DF82DF1F61F0042906E /* openssl.xcframework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -66,6 +71,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + A9083DF62DF1F61F0042906E /* openssl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = openssl.xcframework; path = ../blink/xcfs/.build/artifacts/xcfs/openssl/openssl.xcframework; sourceTree = ""; }; A925389A2DEE06DC007E0A18 /* ShhShell.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ShhShell.app; sourceTree = BUILT_PRODUCTS_DIR; }; A92538A72DEE06DE007E0A18 /* ShhShellTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShhShellTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; A92538B12DEE06DE007E0A18 /* ShhShellUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShhShellUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -87,8 +93,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A92D6A2F2DF1BC720031755A /* SSH.framework in Frameworks */, A9C897EB2DF1A95F00EF9A5F /* NMSSH.framework in Frameworks */, + A9083DE22DF1F5D80042906E /* SSH.framework in Frameworks */, + A9083DF72DF1F61F0042906E /* openssl.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -188,6 +195,7 @@ A9C8976F2DF1980900EF9A5F /* Frameworks */ = { isa = PBXGroup; children = ( + A9083DF62DF1F61F0042906E /* openssl.xcframework */, A9C897DC2DF1A1C200EF9A5F /* NMSSH.framework */, ); name = Frameworks; @@ -538,6 +546,7 @@ DEVELOPMENT_TEAM = 8JGND254B7; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSLocalNetworkUsageDescription = _; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -567,6 +576,7 @@ DEVELOPMENT_TEAM = 8JGND254B7; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSLocalNetworkUsageDescription = _; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; diff --git a/ShhShell/SSHHandler.swift b/ShhShell/SSHHandler.swift index 2e1647e..af1f5e8 100644 --- a/ShhShell/SSHHandler.swift +++ b/ShhShell/SSHHandler.swift @@ -6,50 +6,58 @@ // import Foundation -import NMSSH +//import NMSSH import LibSSH class SSHHandler: ObservableObject { - - var session: NMSSHSession + var session: ssh_session? var shellHandlerDelegate = ShellHandler() - - init( - session: NMSSHSession = NMSSHSession(host: "localhost:32222", andUsername: "neon443") - ) { - ssh_new() - self.session = session - session.connectToAgent() + init() { +// session = ssh_new() +// guard session != nil else { return } } func connect() { - session.authenticate( - byPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIaFx9u3BMq2qW1SJzQik7k8/9p9KV8KZ9JehyKKd2Wu", - privateKey: """ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtz -c2gtZWQyNTUxOQAAACCGhcfbtwTKtqltUic0IpO5PP/afSlfCmfSXociindlrgAA -AIgKUk2MClJNjAAAAAtzc2gtZWQyNTUxOQAAACCGhcfbtwTKtqltUic0IpO5PP/a -fSlfCmfSXociindlrgAAAEClrzCbl2ZGxAdqa1rS3w3ZEDKXi7Ysf4FKJO375Lhx -54aFx9u3BMq2qW1SJzQik7k8/9p9KV8KZ9JehyKKd2WuAAAAAAECAwQF ------END OPENSSH PRIVATE KEY----- -""", - andPassword: nil - ) - if session.isConnected { -// session.authenticate(byPassword: "password") - do { - try session.channel.startShell() - } catch { - print(error.localizedDescription) - } - session.channel.delegate = shellHandlerDelegate + var verbosity: Int = SSH_LOG_PROTOCOL + var port: Int = 2222 + + session = ssh_new() + guard session != nil else { + fatalError("no ssh session??!?!") + } + + ssh_options_set(session, SSH_OPTIONS_HOST, "localhost") + ssh_options_set(session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity) + ssh_options_set(session, SSH_OPTIONS_PORT, &port) + + let status = ssh_connect(session) + print(status) + } + + func disconnect() { + guard session != nil else { fatalError("no ssession") } + ssh_disconnect(session) + } + + func hardcodedAuth() { + var hostkey: ssh_key? + ssh_get_server_publickey(session, &hostkey) + print(hostkey) + + var password = "root" + + let rc = ssh_userauth_password(session, "root", password) + if rc != SSH_AUTH_SUCCESS.rawValue { + print("auth failure") + } else { + print("yay success") } } func testExec() { - guard session.isConnected else { return } - session.channel.execute("ls", error: nil) + connect() + hardcodedAuth() + disconnect() } } diff --git a/ShhShell/Views/ContentView.swift b/ShhShell/Views/ContentView.swift index b0efb68..9ebd8d6 100644 --- a/ShhShell/Views/ContentView.swift +++ b/ShhShell/Views/ContentView.swift @@ -17,7 +17,6 @@ struct ContentView: View { .foregroundStyle(.tint) Text("Hello, world!") Button("go") { - sshHandler.connect() sshHandler.testExec() } }