如何使用可选密码和可选文件位置自动执行 ssh-keygen -t rsa?

How to automate ssh-keygen -t rsa with an optional passphrase and optional file location?

我想使用可选文件和可选密码自动执行 ssh-keygen,如果找到文件则覆盖。如果我在终端中写出脚本,它会问我三个问题。我根本不希望它提示我,只是 运行 和 return 响应或 return 错误。

到目前为止,这是我的代码:

#!/usr/bin/osascript

on run

    set email to "myemail@email.com"
    set result to do shell script "ssh-keygen -t rsa -C \"" & email & "\""

    return result
end run

注意:This 问题非常相似,但发布者没有提到传入可选文件,也没有提到他如何处理已经存在的文件。

使用 -N 指定密码(或不使用密码)并使用 -f 指定文件位置,如果存在密钥,请先删除它们。例如:

set keyPath to "~/.ssh/my_rsa_key"

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

set email to "myemail@email.com"
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="myemail@email.com"
myPassPhrase="abcdefgh"

rm $keyPath $keyPath.pub &> /dev/null
ssh-keygen -t rsa -C "$email" -N "$myPassPhrase" -f "$keyPath"