GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso configurare SSH in modo che non provi automaticamente tutti i file di identità?

Puoi usare lo IdentitiesOnly=yes opzione insieme a IdentityFile (vedi la pagina man di ssh_config). In questo modo, puoi specificare quali file cercare.

In questo esempio, ssh solo cerca nelle identità fornite nei file ssh_config + le 4 elencate nella riga di comando (le identità fornite dall'agente verranno ignorate):

ssh -o IdentitiesOnly=yes \
    -o IdentityFile=id1.key \
    -o IdentityFile=id2.key \
    -i id3.key \
    -i id4.key \
    [email protected]

I moduli -i e -o IdentityFile= sono intercambiabili.

In .ssh/config , puoi includere una configurazione come questa:

Host example
User user123
Hostname example.com
IdentityFile ~/.ssh/id_rsa_example
IdentityFile ~/.ssh/id_rsa_example2
IdentitiesOnly yes

La risposta breve di user76528 è corretta, ma ho appena avuto questo problema e ho pensato che qualche elaborazione sarebbe stata utile. Potresti anche interessarti a questa soluzione se ti sei chiesto "Perché ssh ignora l'opzione di configurazione del mio file di identità"?

In primo luogo, a differenza di ogni altra opzione in ssh_config, ssh non usa il primo IdentityFile che trova. Invece il IdentityFile l'opzione aggiunge quel file a un elenco di identità utilizzate. Puoi impilare più IdentityFile opzioni e il client ssh le proverà tutte finché il server non ne accetta una o rifiuta la connessione.

In secondo luogo, se usi un agente ssh, ssh tenterà automaticamente di usare le chiavi nell'agente, anche se non le hai specificate con l'opzione IdentityFile (o -i) di ssh_config. Questo è un motivo comune per cui potresti ricevere Too many authentication failures for user errore. Usando il IdentitiesOnly yes l'opzione disabiliterà questo comportamento.

Se utilizzi ssh come più utenti su più sistemi, ti consiglio di inserire IdentitiesOnly yes nella sezione globale di ssh_config e inserendo ogni IdentityFile all'interno delle sottosezioni Host appropriate.


Generalmente lo faccio così:

$ ssh -o IdentitiesOnly=yes -F /dev/null -i ~/path/to/some_id_rsa [email protected]

Le opzioni sono le seguenti:

  • -o IdentitiesOnly=yes - indica a SSH di utilizzare solo le chiavi fornite tramite la CLI e nessuna da $HOME/.ssh o tramite ssh-agent
  • -F /dev/null - disabilita l'uso di $HOME/.ssh/config
  • -i ~/path/to/some_id_rsa - la chiave che vuoi usare esplicitamente per la connessione

Esempio

$ ssh -v -o IdentitiesOnly=yes -F /dev/null -i ~/my_id_rsa [email protected]
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /dev/null
debug1: Connecting to someserver.mydom.com [10.128.12.124] port 22.
debug1: Connection established.
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA f5:60:30:71:8c:a3:da:a3:fe:b1:6d:0b:20:87:23:e1
debug1: Host 'someserver' is known and matches the RSA host key.
debug1: Found key in /Users/sammingolelli/.ssh/known_hosts:103
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to someserver.mydom.com ([10.128.12.124]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
Last login: Tue Dec  8 19:03:24 2015 from 153.65.219.15
someserver$

Si noti nell'output precedente che ssh ha identificato solo il my_id_rsa chiave privata tramite la CLI e che la utilizza per connettersi a qualche server.

In particolare queste sezioni:

debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1

e:

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Linux
  1. Come cambiare l'identità di un sistema Linux

  2. Come modificare l'estensione di più file?

  3. Come rilevare se la shell è controllata da Ssh?

  4. Come sostituire un carattere con un altro in tutti i nomi di file delle directory correnti?

  5. Come configurare Bashrc per chiudere tutte le sessioni di Tmux quando chiudo il terminale?

Come trasferire file con Rsync su SSH

Come trovare file con il comando fd in Linux

Come salvare automaticamente i file scaricati in Brave Browser

Come modificare la porta SSH in CentOS

Come configurare il timeout su SSH Client Putty

Come posso cancellare le credenziali in AWS Configure?