Установка переменных в ожидаемом скрипте не имеет никакого эффекта - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь написать скрипт для получения пароля из моей цепочки для ключей 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> %

Пароль скрыт, очевидно, но это работает.Почему?

...