最近,我一直在尝试使用Swift制作一个(非常)简单的程序,它允许您通过SSH连接到服务器并执行一些文件。不幸的是,我无法弄清楚如何在Swift应用程序中完全启动SSH会话。这是我写的一些代码:
var sshConnectCommand = ["-c", "spawn ssh "+sshUsername+"@"+sshHost+"; expect assword:; send "+sshPassword+"\r"]
func sshIn() {
//starting ssh session
let sshConnect = NSTask()
sshConnect.arguments = [testCmd]
//rerouting output through a pipe
sshConnect.standardOutput = logAppend
//launch!
sshConnect.launch();
}
正如您所看到的,我已经使用NSTask尝试运行'期望'命令输入密码和一切。我想尝试尽可能避免使用SSH-keygen,因为这是用于用户无权访问的服务器。
所以,总结一下: 如果没有SSH-keygen,您将如何连接到SSH,同时完全保留在应用程序代码中?
编辑:我还应该添加,在尝试编译时,我收到此错误:
[Swift._SwiftDeferredNSArray fileSystemRepresentation]: unrecognized selector sent to instance 0x600000032500
。我不确定这意味着什么。
答案 0 :(得分:6)
我一直在使用类似的东西来ssh到我的Raspberry Pi中:
func sshIn() {
let task = NSTask()
task.launchPath = "/usr/bin/ssh"
task.arguments = ["USERNAME@IPADDRESS", "-t", "sudo systemctl stop mediacenter; /opt/vc/bin/tvservice -o"]
task.launch()
}
-t
在命令运行完毕后关闭连接,您可以像command1; command 2
那样传递所有命令sudo systemctl stop mediacenter; /opt/vc/bin/tvservice -o
至于keygen的事情,我认为你没有多少选择。你可以考虑将它锁定一点。 Here's一个开始寻找的好地方。