Как автоматизировать ssh-keygen -t rsa с дополнительной парольной фразой и дополнительным расположением файла?

Я хотел бы автоматизировать ssh-keygen с дополнительным файлом и дополнительной фразой-паролем и перезаписать, если файл найден. Если я пишу скрипт в Терминале, он задает мне три вопроса. Я не хочу, чтобы он вообще меня подсказывал, а просто запускал и возвращал ответ или возвращал ошибку.

Вот мой код:

#!/usr/bin/osascript

on run

    set email to "[email protected]"
    set result to do shell script "ssh-keygen -t rsa -C \"" & email & "\""

    return result
end run

ПРИМЕЧАНИЕ. Это вопрос очень похож, но автор не упоминает о передаче необязательного файла и не упоминает, как он обрабатывает уже существующие файлы.


person 1.21 gigawatts    schedule 17.01.2015    source источник


Ответы (1)


Укажите парольную фразу (или не используйте парольную фразу) с помощью -N и расположение файла с помощью -f и сначала удалите ключи, если они существуют. Например:

set keyPath to "~/.ssh/my_rsa_key"

do shell script ("rm " & keyPath & " " & keyPath & ".pub &> /dev/null;:")

set email to "[email protected]"
set myPassPhrase to "abcdefgh"

do shell script ¬
    "ssh-keygen -t rsa -C \"" & email & "\" -N \"" & myPassPhrase & "\" -f " & keyPath

(result — это автоматическая переменная, присваиваемая результату последней инструкции, поэтому вам не нужно указывать ее явно, но вы можете заменить ее другим именем переменной, если хотите, чтобы переменная была назначена.)

Кроме того, учитывая, что большинство этих операций происходят внутри do shell script, вам может быть лучше просто сделать все это как скрипт Bash, например:

#!/bin/bash

keyPath="~/.ssh/my_rsa_key"
email="[email protected]"
myPassPhrase="abcdefgh"

rm $keyPath $keyPath.pub &> /dev/null
ssh-keygen -t rsa -C "$email" -N "$myPassPhrase" -f "$keyPath"
person Ivan X    schedule 18.01.2015
comment
Я думаю, что bash тоже может быть лучше, но я не так знаком с ним. Есть ли способ отправить ответ, например, результат возврата или результат печати? - person 1.21 gigawatts; 19.01.2015
comment
Bash возвращает ответы на стандартный вывод (экран, если только он не перенаправлен в файл или не передан в другую программу командной строки). Если вы хотите захватить переменную, например. theResult, используйте $(command) и назначьте его переменной, например: theResult=$(ssh-keygen -t rsa -C "$email" -N "$myPassPhrase" -f "$keyPath"). При обращении к уже назначенным переменным ставьте перед ними префикс $; и вы можете выводить с помощью echo и возвращать значения из подпрограммы с return, например. echo $theResult или return $theResult. Bash может выполнять большую часть той же логики, что и AppleScript, но не напрямую взаимодействует с программой с графическим интерфейсом. - person Ivan X; 19.01.2015