Autorizzazione negata (publickey, keyboard-interactive)
Domanda
Il permesso ha negato (publickey, keyboard-interactive) ha ottenuto questo errore, mentre io sto cercando di cvs checkout da Perl.
ciò che è problema e su come reslove questo?
Codice:
system ( "CSVROOT:--- CVSRSH:--- cvs co a ");
# i have proper value in cvs root and cvs rsh .
la sua corsa da solo e con il tasto ssh
Soluzione
procedura per diagnosticare l'errore:
- Stai usando una chiave SSH?
- non quella chiave hanno una passphrase?
- Funziona quando lo si esegue a mano?
- è lo script in esecuzione come lo stesso utente, come quando si esegue a mano?
- è lo script in esecuzione nello stesso ambiente, come quando si esegue a mano? (Ad esempio
cron
lavori non vengono eseguiti nello stesso ambiente)
Se si pensa che tutte le risposte sono sì, allora molto probabilmente l'ultima risposta è davvero no. Se lo script è in esecuzione da un programmatore come cron
è molto probabile che non viene eseguito con lo stesso ambiente, come quando si esegue a mano. Il modo in cui normalmente risolvere questo è quello di utilizzare uno script di shell tra lo scheduler e lo script Perl:
#!/bin/bash
source /home/USERNAME/.profile
#set any other environment variables it needs like
export CSVROOT=:pserver:USERNAME@HOST:/path/to/repo
export CVSRSH=ssh
/path/to/perl/script/script.pl
Altri suggerimenti
Follow-up indagini dopo Chas delle domande:
-
fa quel comando normalmente eseguito in
/bin/sh
o qualche altro shell? A prova, eseguire il comando/bin/sh
per avviare Bourne shell e provare il comando a mano di nuovo. Io non sono a conoscenza "CVSROOT: ---" la notazione - è ciò significava per set variabile di ambiente CVSROOT? In Bourne shell di solito è fatto usando "=", non ha mai visto ":". Utilizzato -
Il comando, quando viene eseguito a mano, si aspettano qualche input da voi? Non ho mai visto
cvs co
di farlo, ma io non lo uso con ssh. -
Tenta di aggiungere un redirect alla fine del comando e guardate cosa c'è nel file dopo l'esecuzione:
system ( "CSVROOT:--- CVSRSH:--- cvs co a > /tmp/log_cmd 2>&1");