使用Swift进行SSH连接

时间:2015-07-14 13:25:45

标签: swift ssh

最近,我一直在尝试使用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。我不确定这意味着什么。

1 个答案:

答案 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一个开始寻找的好地方。