Guida passo passo chiavi SSH con Ledger Nano S in GNU/Linux
Articolo ispirato dalla guida https://thoughts.il chet37.net/a-step-by-step-guide-to-securing-your-ssh-keys-with-the-ledger-nano-s-92e58c64a005
Dall’autore: Fred de Villamil
Contrariamente a quanto si crede comunemente il Ledger Nano S non è progettato solo per proteggere le criptovalute. Può anche essere utilizzato per generare e memorizzare chiavi SSH private e lo rende il modo più sicuro per proteggerle.
Essendo sia un po’ paranoico ed un pesante utilizzatore di SSH, non volevo più fare affidamento sul computer per memorizzare le chiavi private. Ecco perché ho deciso di spostare tutto sul Ledger Nano S. La cosa più fastidiosa nel generare una serie di nuove coppie di chiavi è stato necessario cambiare ogni chiave pubblica utilizzata sui server e su Github. Volevo ricavare le mie nuove chiavi dall’elemento di sicurezza di Ledger memorizzato nella chiave privata invece di riutilizzare chiavi che potrebbero essere già state compromesse.
Installazione dell’applicazione SSH sul Ledger Nano S
Prima di poter utilizzare il Ledger Nano S per generare e memorizzare le chiavi SSH è necessario installare l’applicazione SSH.
Collegare e sbloccare il Ledger Nano S prima di lanciare Ledger Live. Come prima cosa attivate le applicazioni per gli sviluppatori. Cliccate l’ingranaggio in alto a destra, in fondo alla lista attivate l’interruttore della voce Developer mode:
Successivamente cliccate su Manager
e quando richiesto premere il tasto destro sul vostro Ledger per permettere l’accesso al software
Nel Manager cercare l’applicazione ssh ed installare SSH/PGP Agent premendo sul tasto Install
Installare gli strumenti della riga di comando di Python Agent Ledger
Aprite la vostra applicazione terminale preferita e assicuratevi di avere Python 3 e pip3 in esecuzione sul vostro computer.
$ which python3
/usr/local/bin/python3
$ which pip3
/usr/local/bin/pip3
Se non avete ancora Python3, non fatevi prendere dal panico e installatelo, ora utilizzare pip3 per installare il Ledger Agent:
$ pip3 install ledger_agent
Aggiungere il ledger-agent al PATH
$ nano ~/.bashrc
Aggiungere le seguenti righe in fondo, dove USERNAME è il vostro nome utente
export PATH=$PATH:/home/USERNAME/.local/bin
attivare con
$ source ~/.bashrc
Regole udev
Aggiungere quanto segue a /etc/udev/rules.d/20-hw1.rules
$ sudo nano /etc/udev/rules.d/20-hw1.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="1b7c", MODE="0660", TAG+="uaccess", TAG+="udev-acl" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="2b7c", MODE="0660", TAG+="uaccess", TAG+="udev-acl" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="3b7c", MODE="0660", TAG+="uaccess", TAG+="udev-acl" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="4b7c", MODE="0660", TAG+="uaccess", TAG+="udev-acl" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="1807", MODE="0660", TAG+="uaccess", TAG+="udev-acl" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="1808", MODE="0660", TAG+="uaccess", TAG+="udev-acl" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2c97", ATTRS{idProduct}=="0000", MODE="0660", TAG+="uaccess", TAG+="udev-acl" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2c97", ATTRS{idProduct}=="0001", MODE="0660", TAG+="uaccess", TAG+="udev-acl" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="plugdev", ATTRS{idVendor}=="2c97" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="plugdev", ATTRS{idVendor}=="2581"
ed attivare con
$ udevadm trigger
$ sudo udevadm control --reload-rules
Nel caso in cui il Ledger Nano S non dovesse essere riconosciuto dal sistema seguire la guida ufficiale per Linux qui:
https://support.ledgerwallet.com/hc/en-us/articles/115005165269-Fix-connection-issues
Terminata l’installazione è il momento di generare la prima chiave SSH.
Generare la prima chiave SSH sul Ledger Nano S
Collega e sblocca il Ledger Nano S se è scollegato da quando è stata installata l’applicazione SSH/GPG Agent, oppure per il timepout di sicurezza. Scorrere le applicazioni ed attivare SSH/GPG aAgnet premendo entrambi i bottoni del Ledger Nano S.
Una volta lanciata l’applicazione, il Ledger Nano S visualizza SSH/PGP Agent.
Torna al terminale ed avvia:
$ ledger-agent user@host
Dove user è l’utente SSH abituale e host il pc/server al quale ci si desidera connettere. e.g. user=pi host=10.0.0.10
ledger-agent [email protected]
Vi verrà richiesto di confermare l’operazione sul Ledger Nano S. Premere il boottone destro
Accettare e tornare al terminale, questa operazione visualizzerà la chiave pubblica SSH per l’utente e l’host precedentemente selezionato.
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB8quRZUW3mEvYICjTji8cUkHop6k88lerDUgOaNp4ssVdde2LlvgUN5IeKoe7LhPNz01EB/cr4h07qEW2h+UrU= <ssh://[email protected]|nist256p1>
Copiare l’intera stringa nel file ~/.ssh/authorized_keys del server. Ora è possibile per usare SSH con la uova chiave generata.
$ ledger-agent -c user@host
Quindi nel nostro esempio
$ ledger-agent -c [email protected]
Prima di connettersi è necessario accettare l’uso della chiave sul Ledger Nano S.
Usare il ledger agent nella shell
L’utilizzo del Ledger agent per il collegamento all’SSH non è la cosa più pratica di sempre. Per fortuna, è possibile utilizzarlo come agente SSH tradizionale in modo da poterlo utilizzare con il client SSH, git e molti altri.
Dopo la prima generazione di chiavi, il Ledger agent ha stampato una classica chiave pubblica SSH ECDSA con una stringa tra <>.
<ssh://[email protected]|nist256p1>
Questa stringa è l’identità di un agente Ledger. Aggiungerla ad un file, ad esempio ~/.ssh/ledger.conf, quindi eseguire nuovamente l’agente Ledger:
$ echo "<ssh://user@host|nist256p1>" >> ~/.ssh/ledger.conf
$ ledger-agent ~/.ssh/ledger.conf -s -v
2018-11-22 19:19:38,241 INFO identity #0: <ssh://user@host|nist256p1> [__init__.py:208]
2018-11-22 19:19:38,259 INFO running '/bin/zsh' with {'SSH_AUTH_SOCK': '/var/folders/4r/1nrw0lls4rqdq52xkvdcj7vm0000gn/T/trezor-ssh-agent-ib39yy', 'SSH_AGENT_PID': '29715'} [server.py:119]
Nel nostro esempio
$ echo "<ssh://[email protected]|nist256p1>" >> ~/.ssh/ledger.conf
$ ledger-agent ~/.ssh/ledger.conf -s -v
2018-11-22 19:19:38,241 INFO identity #0: <ssh://[email protected]|nist256p1> [__init__.py:208]
2018-11-22 19:19:38,259 INFO running '/bin/zsh' with {'SSH_AUTH_SOCK': '/var/folders/4r/1nrw0lls4rqdq52xkvdcj7vm0000gn/T/trezor-ssh-agent-ib39yy', 'SSH_AGENT_PID': '29715'} [server.py:119]
Questo genera una nuova shell con un agente SSH che utilizza tutte le identità memorizzate nel file ledger.conf. In questo modo, si può semplicemente eseguire.
$ ssh user@host
In questo modo si utilizza la chiave SSH memorizzata nel Ledger Nano S senza la necessità di utilizzare il Ledger agent. Funziona anche con git, e tutto ciò che utilizza SSH come mosh.
In alternativa è possibile creare degli alias in .bashrc
$ nano ~/.bashrc
alias ssh-pi="ledger-agent -c [email protected]"
Ricaricare il profilo con
$ source ~/.bashrc
Automazione, perché siamo pigri
Non sarei innnamorato dell’informatica se non fossi pigro. Ecco perché adoro lo script dell’autore originale che esegue tutto il lavoro per me (disponibile su Github sotto la licenza MIT).
Questo script:
- Genera una nuova chiave per il tuo user@host
- Aggiunge la nuova identità al file ~/.ssh/ledger.conf
- Aggiunge il nuovo host al file ~/.ssh/config
- Ricarica il Ledger agent con tutte le identità (solo nella shell corrente)
#!/bin/bash
LEDGER_BIN=$(which ledger-agent)
LEDGER_HOST="${1}"
LEDGER_CONF="${HOME}/.ssh/ledger.conf"
EXIT_SUCCESS=0
EXIT_ERROR=1
if [ -z "${LEDGER_HOST}" ]; then
echo "Usage: ${0} user@host"
echo exiting
exit ${EXIT_ERROR}
fi
if [ -z "${LEDGER_BIN}" ]; then
echo "The Ledger Agent binary is missing or not in the path, exiting"
exit ${EXIT_ERROR}
fi
echo "Generating the private key, please confirm on the Nano S..."
key=$(ledger-agent ${LEDGER_HOST})
echo "${key}" | cut -f 3 -d ' ' >> ${LEDGER_CONF}
echo "Adding ${LEDGER_HOST} to your ssh config"
ssh_host=$(echo ${LEDGER_HOST} | cut -f 2 -d '@')
ssh_user=$(echo ${LEDGER_HOST} | cut -f 1 -d '@')
echo "Host ${ssh_host}
HostName ${ssh_host}
Port 22
User ${ssh_user}
PreferredAuthentications publickey
" >> ${HOME}/.ssh/config
echo "Your new public key is now into your clipboard!"
echo "${key}" | cut -f 1,2 -d ' ' | pbcopy
echo "Now reloading the Ledger agent"
${LEDGER_BIN} ${LEDGER_CONF} -v -s
exit ${EXIT_SUCCESS}
Da oggi è possibile dare il vostro supporto su Patreon https://www.patreon.com/antonionardella
Per ulteriori informazioni in italiano o tedesco trovate i miei contatti a questa pagina.
Se avete trovato utile la mia libera traduzione/guida, accetto volentieri delle donazioni 😉
IOTA:QOQJDKYIZYKWASNNILZHDCTWDM9RZXZV9DUJFDRFWKRYPRMTYPEXDIVMHVRCNXRSBIJCJYMJ9EZ9USHHWKEVEOSOZB
BTC:1BFgqtMC2nfRxPRge5Db3gkYK7kDwWRF79
Non garantisco nulla e mi libero da ogni responsabilità.