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?

Author: Ulrich Eckhardt, 2012-10-23

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

 21
Author: enrico.bacis,
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.

 8
Author: kenorb,
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.

 1
Author: Ray Shannon,
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