using blink shell's ssh for ssh instead of nmsssh idk why it doesnt work

This commit is contained in:
neon443
2025-06-05 12:46:42 +01:00
parent 7d206478ea
commit 4e2c47f09a
7 changed files with 249 additions and 5 deletions

View File

@@ -168,12 +168,18 @@
CLASSPREFIX = NM;
LastUpgradeCheck = 0830;
ORGANIZATIONNAME = "Nine Muses";
TargetAttributes = {
18AE8FA418BBEDD000AE0FC3 = {
DevelopmentTeam = 8JGND254B7;
};
};
};
buildConfigurationList = 18AE8FA018BBEDD000AE0FC3 /* Build configuration list for PBXProject "PTYExample" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
English,
en,
Base,
);
@@ -321,7 +327,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = 8JGND254B7;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "PTYExample/PTYExample-Prefix.pch";
INFOPLIST_FILE = "PTYExample/PTYExample-Info.plist";
@@ -337,7 +343,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = 8JGND254B7;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "PTYExample/PTYExample-Prefix.pch";
INFOPLIST_FILE = "PTYExample/PTYExample-Info.plist";

View File

@@ -24,6 +24,13 @@
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
<key>UILaunchStoryboardName</key>
<string>Launch Screen</string>
<key>UIMainStoryboardFile</key>

View File

@@ -13,8 +13,12 @@
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 */; };
A9C897DE2DF1A1C900EF9A5F /* NMSSH.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9C897DC2DF1A1C200EF9A5F /* NMSSH.framework */; };
A92D69E82DF1B9ED0031755A /* SSH.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A92D69C92DF1B9B00031755A /* SSH.framework */; };
A92D69E92DF1B9ED0031755A /* SSH.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A92D69C92DF1B9B00031755A /* SSH.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
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 */; };
A9C897F12DF1AB5700EF9A5F /* ShellHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C897F02DF1AB5700EF9A5F /* ShellHandler.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -32,6 +36,20 @@
remoteGlobalIDString = A92538992DEE06DC007E0A18;
remoteInfo = ShhShell;
};
A92D69C82DF1B9B00031755A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A92D69AD2DF1B9AF0031755A /* Blink.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 07FABB8425C9AEC000E1CC2C;
remoteInfo = SSH;
};
A9C897E82DF1A53B00EF9A5F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A9C897D22DF1A18C00EF9A5F /* NMSSH-iOS.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 186CC9581B69110500F674C4;
remoteInfo = NMSSH;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -42,6 +60,7 @@
dstSubfolderSpec = 10;
files = (
A9C897DF2DF1A1C900EF9A5F /* NMSSH.framework in Embed Frameworks */,
A92D69E92DF1B9ED0031755A /* SSH.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -58,8 +77,11 @@
A92538CB2DEE0744007E0A18 /* ShhShellTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShhShellTests.swift; sourceTree = "<group>"; };
A92538CE2DEE0745007E0A18 /* ShhShellUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShhShellUITests.swift; sourceTree = "<group>"; };
A92538CF2DEE0745007E0A18 /* ShhShellUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShhShellUITestsLaunchTests.swift; sourceTree = "<group>"; };
A92D69AD2DF1B9AF0031755A /* Blink.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Blink.xcodeproj; path = /Users/neon443/Downloads/blink/Blink.xcodeproj; sourceTree = "<absolute>"; };
A9C897D22DF1A18C00EF9A5F /* NMSSH-iOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "NMSSH-iOS.xcodeproj"; path = "Carthage/Checkouts/NMSSH/NMSSH-iOS.xcodeproj"; sourceTree = "<group>"; };
A9C897DC2DF1A1C200EF9A5F /* NMSSH.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = NMSSH.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A9C897EE2DF1A9A400EF9A5F /* SSHHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SSHHandler.swift; sourceTree = "<group>"; };
A9C897F02DF1AB5700EF9A5F /* ShellHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShellHandler.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -67,7 +89,8 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A9C897DE2DF1A1C900EF9A5F /* NMSSH.framework in Frameworks */,
A9C897EB2DF1A95F00EF9A5F /* NMSSH.framework in Frameworks */,
A92D69E82DF1B9ED0031755A /* SSH.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -98,6 +121,7 @@
A9C897D22DF1A18C00EF9A5F /* NMSSH-iOS.xcodeproj */,
A9C8976F2DF1980900EF9A5F /* Frameworks */,
A925389B2DEE06DC007E0A18 /* Products */,
A92D69AD2DF1B9AF0031755A /* Blink.xcodeproj */,
);
sourceTree = "<group>";
};
@@ -115,6 +139,8 @@
isa = PBXGroup;
children = (
A92538C62DEE0742007E0A18 /* ShhShellApp.swift */,
A9C897EE2DF1A9A400EF9A5F /* SSHHandler.swift */,
A9C897F02DF1AB5700EF9A5F /* ShellHandler.swift */,
A92538D32DEE0749007E0A18 /* Views */,
);
path = ShhShell;
@@ -153,6 +179,14 @@
path = Resources;
sourceTree = "<group>";
};
A92D69B12DF1B9B00031755A /* Products */ = {
isa = PBXGroup;
children = (
A92D69C92DF1B9B00031755A /* SSH.framework */,
);
name = Products;
sourceTree = "<group>";
};
A9C8976F2DF1980900EF9A5F /* Frameworks */ = {
isa = PBXGroup;
children = (
@@ -164,6 +198,7 @@
A9C897E12DF1A53B00EF9A5F /* Products */ = {
isa = PBXGroup;
children = (
A9C897E92DF1A53B00EF9A5F /* NMSSH.framework */,
);
name = Products;
sourceTree = "<group>";
@@ -269,6 +304,10 @@
productRefGroup = A925389B2DEE06DC007E0A18 /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = A92D69B12DF1B9B00031755A /* Products */;
ProjectRef = A92D69AD2DF1B9AF0031755A /* Blink.xcodeproj */;
},
{
ProductGroup = A9C897E12DF1A53B00EF9A5F /* Products */;
ProjectRef = A9C897D22DF1A18C00EF9A5F /* NMSSH-iOS.xcodeproj */;
@@ -283,6 +322,23 @@
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
A92D69C92DF1B9B00031755A /* SSH.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = SSH.framework;
remoteRef = A92D69C82DF1B9B00031755A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
A9C897E92DF1A53B00EF9A5F /* NMSSH.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = NMSSH.framework;
remoteRef = A9C897E82DF1A53B00EF9A5F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
A92538982DEE06DC007E0A18 /* Resources */ = {
isa = PBXResourcesBuildPhase;
@@ -315,6 +371,8 @@
files = (
A92538C82DEE0742007E0A18 /* ContentView.swift in Sources */,
A92538C92DEE0742007E0A18 /* ShhShellApp.swift in Sources */,
A9C897EF2DF1A9A400EF9A5F /* SSHHandler.swift in Sources */,
A9C897F12DF1AB5700EF9A5F /* ShellHandler.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@@ -0,0 +1,87 @@
{
"originHash" : "3c0aff882bcb0d68be09455d4b0d93dfcf0115ebcb0b9f3c8150da7d6ca8b6c0",
"pins" : [
{
"identity" : "base32kit",
"kind" : "remoteSourceControl",
"location" : "https://github.com/jenslauterbach/Base32Kit.git",
"state" : {
"revision" : "34e7e2796cb8d791df6f9a275a858048fcf52700",
"version" : "0.2.1"
}
},
{
"identity" : "purchases-ios",
"kind" : "remoteSourceControl",
"location" : "https://github.com/RevenueCat/purchases-ios.git",
"state" : {
"revision" : "ae6b639cacd045c06ee92ca80b49e34255375ee3",
"version" : "4.43.6"
}
},
{
"identity" : "runestone",
"kind" : "remoteSourceControl",
"location" : "https://github.com/simonbs/Runestone",
"state" : {
"revision" : "1fad339aab99cf2136ce6bf8c32da3265b2e85e5",
"version" : "0.5.1"
}
},
{
"identity" : "sqlite.swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/stephencelis/SQLite.swift",
"state" : {
"revision" : "a95fc6df17d108bd99210db5e8a9bac90fe984b8",
"version" : "0.15.3"
}
},
{
"identity" : "swiftcbor",
"kind" : "remoteSourceControl",
"location" : "https://github.com/unrelentingtech/SwiftCBOR",
"state" : {
"branch" : "master",
"revision" : "ea5ece79b0efde241495bfaa74eccceeffc382bc"
}
},
{
"identity" : "swiftui-cached-async-image",
"kind" : "remoteSourceControl",
"location" : "https://github.com/lorenzofiamingo/swiftui-cached-async-image",
"state" : {
"branch" : "main",
"revision" : "4f111f2b7aab7ec52a60716cedb673df5203743c"
}
},
{
"identity" : "tree-sitter",
"kind" : "remoteSourceControl",
"location" : "https://github.com/tree-sitter/tree-sitter",
"state" : {
"revision" : "98be227227af10cc7a269cb3ffb23686c0610b17",
"version" : "0.20.9"
}
},
{
"identity" : "treesitterlanguages",
"kind" : "remoteSourceControl",
"location" : "https://github.com/simonbs/treesitterlanguages",
"state" : {
"revision" : "15cf3a9ec3ab95e0d058b7df9f35619123c9e02d",
"version" : "0.1.10"
}
},
{
"identity" : "zipfoundation",
"kind" : "remoteSourceControl",
"location" : "https://github.com/weichsel/ZIPFoundation.git",
"state" : {
"revision" : "02b6abe5f6eef7e3cbd5f247c5cc24e246efcfe0",
"version" : "0.9.19"
}
}
],
"version" : 3
}

55
ShhShell/SSHHandler.swift Normal file
View File

@@ -0,0 +1,55 @@
//
// SSHHandler.swift
// ShhShell
//
// Created by neon443 on 05/06/2025.
//
import Foundation
import NMSSH
import LibSSH
class SSHHandler: ObservableObject {
var session: NMSSHSession
var shellHandlerDelegate = ShellHandler()
init(
session: NMSSHSession = NMSSHSession(host: "localhost:32222", andUsername: "neon443")
) {
ssh_new()
self.session = session
session.connectToAgent()
}
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
}
}
func testExec() {
guard session.isConnected else { return }
session.channel.execute("ls", error: nil)
}
}

View File

@@ -0,0 +1,26 @@
//
// ShellHandler.swift
// ShhShell
//
// Created by neon443 on 05/06/2025.
//
import Foundation
import NMSSH
class ShellHandler: NSObject, NMSSHChannelDelegate {
func channel(_ channel: NMSSHChannel, didReadData message: String) {
print(channel)
print(message)
}
func channel(_ channel: NMSSHChannel, didReadError error: String) {
print(error)
print("error")
}
func channelShellDidClose(_ channel: NMSSHChannel) {
print(channel)
print("closed channel")
}
}

View File

@@ -6,15 +6,20 @@
//
import SwiftUI
import NMSSH
struct ContentView: View {
var sshHandler = SSHHandler()
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
Button("go") {
sshHandler.connect()
sshHandler.testExec()
}
}
.padding()
}