Jak zrobić SSH-add hasło odczytu z pliku?
Próbuję dodać klucz w ssh-agent
i chcę ssh-add
odczytać hasło z pliku za pomocą. Jak to możliwe?
Jak zautomatyzować ten proces ze skryptu powłoki?
3 answers
W zależności od twojej dystrybucji i wersji ssh-add możesz być w stanie lub nie używać opcji -p
ssh-add, która odczytuje hasło ze standardowego wejścia:
cat passfile | ssh-add -p keyfile
Jeśli to nie działa, możesz użyć Expect, uniksowego narzędzia, aby interaktywne aplikacje nie były interaktywne. Musisz go zainstalować z menedżera pakietów.
Napisałem dla ciebie narzędzie w expect. Po prostu skopiuj zawartość pliku o nazwie ssh-add-pass i ustaw plik wykonywalny uprawnienia na it (chmod +x ssh-add-pass
). Możesz również skopiować go do /usr / bin lub/usr / local / bin, aby był dostępny z $PATH search.
#!/bin/bash
if [ $# -ne 2 ] ; then
echo "Usage: ssh-add-pass keyfile passfile"
exit 1
fi
eval $(ssh-agent)
pass=$(cat $2)
expect << EOF
spawn ssh-add $1
expect "Enter passphrase"
send "$pass\r"
expect eof
EOF
Użycie jest po prostu: ssh-add-pass keyfile passfile
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-10 08:41:34
Oto pewne obejście dla Systemów nie obsługujących -p
:
$ PASS="my_passphrase"
$ install -vm700 <(echo "echo $PASS") "$PWD/ps.sh"
$ cat id_rsa | SSH_ASKPASS="$PWD/ps.sh" ssh-add - && rm -v "$PWD/ps.sh"
Gdzie {[2] } to w zasadzie Twój skrypt drukujący hasło. Zobacz: man ssh-add
.
Aby uczynić go bezpieczniejszym (aby nie trzymać go w tym samym pliku), użyj mktemp
, Aby wygenerować losowy plik prywatny, uczynić go wykonywalnym (chmod
) i upewnij się, że po wykonaniu wyświetli hasło na standardowe wyjście.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-15 09:51:44
Podobne do odpowiedzi kenorba, ale nie zapisuje tajemnicy w pliku:
$ SSH_ASKPASS=/path/to/ssh_give_pass.sh ssh-add $KEYFILE <<< "$KEYPASS"
Gdzie ssh_give_pass.sh jest:
#!/bin/bash
# Parameter $1 passed to the script is the prompt text
# READ Secret from STDIN and echo it
read SECRET
echo $SECRET
Jeśli masz sekret w pliku $ KEYPASS, Wczytaj go najpierw do zmiennej za pomocą
KEYPASS=`cat $KEYPASSFILE`
Również upewnij się, że ssh_give_pass.sh nie jest edytowalny przez nieautoryzowanych użytkowników - łatwo będzie zarejestrować wszystkie tajemnice przekazywane przez skrypt.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-05 18:26:23