mirror of
https://github.com/neon443/ShhShell.git
synced 2026-03-11 13:26:16 +00:00
using blink shell's ssh for ssh instead of nmsssh idk why it doesnt work
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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
55
ShhShell/SSHHandler.swift
Normal 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)
|
||||
}
|
||||
}
|
||||
26
ShhShell/ShellHandler.swift
Normal file
26
ShhShell/ShellHandler.swift
Normal 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")
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user