如何使 ssh-add 从变量中读取密码?

air*_*ata 6 ssh ssh-keys ssh-agent

我想使用 ssh-add 加载受变量密码保护的 ssh 密钥。

当我尝试从文件加载它时,效果很好。

eval $(ssh-agent)

DISPLAY=1 SSH_ASKPASS="passwordfile" ssh-add id_rsa < /dev/null

现在我想将密码和 id_rsa 分配给变量并使用如下内容:

eval $(ssh-agent)

DISPLAY=1 SSH_ASKPASS="$PASSPHRASE" ssh-add $ID_RSA < /dev/null

我怎样才能实现这个目标?

Ada*_*atz 6

SSH_ASKPASS变量存储一个可执行文件,因此您可以指定一个仅输出密码变量值的一行脚本:

\n

的内容~/.ssh/askpass.sh(必须设置为可执行文件,例如chmod +x ~/.ssh/askpass.sh

\n
#!/bin/sh\necho "$PASSPHRASE"\n
Run Code Online (Sandbox Code Playgroud)\n

然后你可以运行:

\n
$ SSH_ASKPASS_REQUIRE=force SSH_ASKPASS="$HOME/.ssh/askpass.sh" ssh-add "$ID_RSA"\n
Run Code Online (Sandbox Code Playgroud)\n

完整示例:

\n
$ export PASSPHRASE="test123" ID_RSA="$HOME/.ssh/test.rsa"\n$ ssh-keygen -t rsa -b 4096 -o -a 100 -f "$ID_RSA"\nGenerating public/private rsa key pair.\nEnter passphrase (empty f\xd0\xber no passphrase): test123\nEnter same passphrase again: test123\nYour identification has been saved i\xd5\xb8 test.rsa\nYour public key has been saved i\xd5\xb8 test.rsa.pub\nThe key fingerprint is:\nSHA256:dLo1pYfzd33lb+GiI8QcES5jaLHEmNhrvRJiMWR3d58 adamhotep@tabasco\nThe key\xe2\x80\x99s randomart image is:\n+---[RSA 4096]----+\n|.oo.++ . o.      |\n|.+.+o.= o.. .    |\n|  o o+ +..oE.    |\n| o +....o+ +     |\n|. o . . S B .   .|\n|   . .   * =   oo|\n|    .   o   . o *|\n|         . . o o+|\n|          ..o ...|\n+----[SHA256]-----+\n$ printf \'#!/bin/sh\\necho "$PASSPHRASE"\\n\' > ~/.ssh/askpass.sh\n$ chmod +x ~/.ssh/askpass.sh\n$ eval $(ssh-agent -s)\n$ SSH_ASKPASS_REQUIRE=force SSH_ASKPASS="$HOME/.ssh/askpass.sh" ssh-add "$ID_RSA"\nIdentity added: test.rsa (adamhotep@tabasco)\n
Run Code Online (Sandbox Code Playgroud)\n

(另请参阅我的 ssh-keygen 建议,了解为什么这些额外参数可以提高安全性。)

\n