使用Swift进行SSH连接

per*_*rry 6 ssh swift

最近,我一直在尝试使用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();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用NSTask尝试运行'expect'命令输入密码和所有内容.我想尝试尽可能避免使用SSH-keygen,因为这旨在用于用户无权访问的服务器.

总结一下:如果没有SSH-keygen,你将如何连接到SSH,同时完全保留在应用程序代码中?

编辑:我还应该添加,在尝试编译时,我收到此错误: [Swift._SwiftDeferredNSArray fileSystemRepresentation]: unrecognized selector sent to instance 0x600000032500.我不确定这意味着什么.

The*_*alk 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()
}
Run Code Online (Sandbox Code Playgroud)

-t在命令运行完毕后关闭连接,你可以传递所有命令,command1; command 2就像我所拥有的sudo systemctl stop mediacenter; /opt/vc/bin/tvservice -o 那样,对于keygen的东西,我认为你没有多少选择.你可以考虑将它锁定一点.这是一个开始寻找的好地方.

  • 大改名后:NSTask in now Process in Swift。 (4认同)