如何使用 swift 4 和 playgrounds 运行 并与 "bash -c ssh ..." 等程序进行交互?
How to run and interact with a program such as "bash -c ssh ..." using swift 4 and playgrounds?
运行 如何使用 swift 4 和 playgrounds 在 bash 终端中与 ssh 等程序交互?终端命令可以在 Mac swift 游乐场中执行,代码如下:
@discardableResult func shell(_ command: String) -> String {
let task = Process()
task.launchPath = "/bin/bash"
task.arguments = ["-c", command]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
return output
}
// Example usage:
let t = shell("ls")
print("\(t)") //prints dir listing
但是,我希望能够与 ssh 等程序交互,而不是 ls 等非交互程序。例如命令:
let t = shell("ssh xxx.xxx.xxx.xxx -T -l root -p 22")
将启动 ssh,ssh 将通过终端提示输入密码。我希望能够以编程方式提供密码并继续。在我看来,由于 SSH 在终端上下文中 运行ning 劫持终端 stdin 和 stdout 应该足够了,但是到目前为止我还没有成功。以下是我发现的一些资源,它们提供了一些关于劫持的信息:
关于是否可以实现以及如何实现的任何想法?
运行 如何使用 swift 4 和 playgrounds 在 bash 终端中与 ssh 等程序交互?终端命令可以在 Mac swift 游乐场中执行,代码如下:
@discardableResult func shell(_ command: String) -> String {
let task = Process()
task.launchPath = "/bin/bash"
task.arguments = ["-c", command]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
return output
}
// Example usage:
let t = shell("ls")
print("\(t)") //prints dir listing
但是,我希望能够与 ssh 等程序交互,而不是 ls 等非交互程序。例如命令:
let t = shell("ssh xxx.xxx.xxx.xxx -T -l root -p 22")
将启动 ssh,ssh 将通过终端提示输入密码。我希望能够以编程方式提供密码并继续。在我看来,由于 SSH 在终端上下文中 运行ning 劫持终端 stdin 和 stdout 应该足够了,但是到目前为止我还没有成功。以下是我发现的一些资源,它们提供了一些关于劫持的信息:
关于是否可以实现以及如何实现的任何想法?