gpt4 book ai didi

swift - 查看 SSH 连接是否成功

转载 作者:行者123 更新时间:2023-11-28 08:08:38 25 4
gpt4 key购买 nike

我正在尝试让我的程序使用 SSH 连接到另一台计算机。它是通用的(用户将提供主机名、IP 和密码),因此不能使用 key 。这是我到目前为止的代码:

func terminalSSH(host:String, password:String, IP:String) {
let pipe = Pipe()
let args = ["-p", password, "ssh", "\(host)@\(IP)"]
let task = Process()
task.launchPath = "/usr/local/bin/sshpass"
task.arguments = args
task.standardOutput = pipe

task.launch()

let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)

print(output)


}

我的问题是我无法使用 sshpass 查看连接是否成功。我希望在连接成功或失败时通知用户。此外,似乎 sshpass 是我可以用于 SSH 的唯一命令,因为终端强制用户输入密码。我知道此代码可用于建立连接,因为我的测试目标计算机上的 system.log 会显示它。谢谢。

最佳答案

首先,您不应该使用 sshpass 和纯文本密码,而应该使用私钥。

要获取任务退出代码,您可以使用以下命令:

task.waitUntilExit()
let status = task.terminationStatus

但是请注意,waitUntilExit 将阻止此方法的返回,直到 session 结束。

session 是在 10 分钟后结束,还是由于错误立即结束,您可以评估 terminationStatus查看程序如何退出。

如果返回码是0,一切顺利退出;如果存在非零值,则可以根据失败的原因采取不同的操作。

task.waitUntilExit()

let status = task.terminationStatus
if status == 0 {

print("Graceful exit.")
} else {

print("Failed with code " + status)
}

检测和响应成功的连接在这里会更加困难,因为只要 ssh session 打开,waitUntilExit 调用就可能会阻塞。

您还可以选择使用循环并检查 task.isRunning

关于swift - 查看 SSH 连接是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44379060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com