Я пытаюсь написать скрипт для получения пароля из моей цепочки для ключей Mac и использовать его для добавления защищенного паролем ключа в цепочку для ключей (используя ssh-add
).Он предназначен для того, чтобы быть частью набора скриптов, которые получают из zsh.В настоящее время мои сценарии выглядят так:
cat <<EOF | expect -d
set password [exec /usr/bin/security find-generic-password -s SSH -w]
puts "$password"
spawn -noecho /usr/bin/ssh-add $::env(HOME)/.ssh/id_ecdsa
expect -timeout 3 "Enter passphrase for"
send "$password\r"
interact
EOF
puts "$password"
предназначен исключительно для целей отладки.И я получаю следующие результаты
$ source .zshrc.d/090_ssh_keys
Password:
Enter passphrase for /Users/james.dominy/.ssh/id_ecdsa:
$ ssh-add -l
The agent has no identities.
Как видите, переменная пароля не установлена;Я попытался изменить имя переменной, и в качестве попытки отладки я попытался установить для нее число (set password 1
) и строковый литерал (set password "a"
), но они тоже не работают.Однако, если я вырезал и вставил это в интерактивную ожидаемую сессию, все работает как ожидалось
expect1.1> set password [exec /usr/bin/security find-generic-password -s SSH -w]
**********
expect1.2> puts $password
**********
expect1.3> spawn -noecho /usr/bin/ssh-add $::env(HOME)/.ssh/id_ecdsa
89080
expect1.4> expect -timeout 3 "Enter passphrase for"
Enter passphrase for /Users/sirlark/.ssh/id_ecdsa: expect1.5> send "$password\r"
expect1.6> interact
Identity added: /Users/sirlark/.ssh/id_ecdsa (sirlark main ssh key)
expect1.7> %
Пароль скрыт, очевидно, но это работает.Почему?