Как запустить и взаимодействовать с программой, такой как "bash -c ssh ...", используя swift 4 и игровые площадки? - PullRequest
0 голосов
/ 22 января 2019

Как можно запустить и взаимодействовать с программой, такой как ssh, в терминале bash, используя swift 4 и игровые площадки?Терминальные команды могут быть выполнены на игровой площадке 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 работает в контексте терминала, этого достаточно для хакерских терминалов stdin и stdout, я до сих пор не добился успеха.Вот некоторые ресурсы, которые я нашел, которые предоставляют некоторую информацию о хай-джекках:

Большой ботаник о хай-джэкджах

Средняя статья

Любойидеи о том, если и как это может быть достигнуто?

1 Ответ

0 голосов
/ 22 января 2019

ssh считывает пароли непосредственно из /dev/tty, а не stdin.Для программного управления tty вам нужны модуль / API pty , которые используются такими инструментами, как Expect .

Я ничего не знаю о Swift, поэтому не уверен, что он имеет аналогичный pty модуль.Если это не так, вы можете использовать Ожидать для запуска ssh.

...