2012-02-29 15:44:22 +0000 2012-02-29 15:44:22 +0000
60
60

scp non funziona ma ssh sì

Se voglio inviare qualcosa via scp al server:

$ scp file server:
                   __________  _____
$

, allora vengono stampate tre righe e il file non viene copiato. Tuttavia posso connettermi al server via ssh senza problemi:

$ ssh server

Come far funzionare scp?

Risposte (6)

72
72
72
2012-03-04 02:57:22 +0000

Una possibile causa di questo tipo di comportamento è avere qualsiasi messaggio stampato durante il processo di login sul server. Scp dipende da ssh per fornire un tunnel criptato totalmente trasparente tra il client e il server.

Controllate tutti gli script di login sul server, e provate anche a usare un utente diverso. Un altro metodo per identificare la fonte dell'errore è usare il -v nel comando, per tracciare il progresso della transazione e vedere dove fallisce. Potete usare fino a -vvv per aumentare la verbosità, se necessario. Anche controllare le varie forme di scp può essere istruttivo, come elencato nel post di InChargeOfIT.

scp, sotto il cofano, imposta un tunnel usando ssh, e poi trasferisce il file su quel tunnel, con un comando ssh all'estremità opposta per catturare il file mentre arriva. Questo è illustrato dall'uso di tar e ssh per copiare una struttura di directory preservando la proprietà e i tempi di creazione con i seguenti comandi:

tar czf - ./* | ssh jf@otherserver.com tar xzf - -C ~/saved_tree

per inviarlo, e

ssh jf@otherserver.com "tar czf - ~/saved_tree" | tar xzvf - -C ./

per riaverlo indietro.

61
61
61
2014-06-03 18:20:48 +0000

Controlla il file .bashrc o equivalente dell'utente di destinazione. ~/.bashrc viene prelevato per i login non interattivi. Se c'è un echo o un comando che emette qualcosa, romperà il protocollo SCP.

15
15
15
2012-02-29 17:21:01 +0000

Edit: Sei sicuro che stai inserendo un percorso valido nel comando scp? Per esempio:

scp test.txt username@remoteserver.com

fallirà (infatti, stamperà solo il comando come quello che stai vedendo). In questo caso, dovrete fornire un percorso valido al server remoto… ad esempio, scp test.txt username@remoteserver.com:~/

Esempi di utilizzo:

Invia un file:

scp /path/to/local/file yourremoteusername@servername.com:/path/to/remote/directory

Ricevi un file:

scp yourremoteusername@servername.com:/path/to/remote/file /path/to/local/directory

Esempi:

Inviare un file dal mio Desktop alla mia cartella home su un server remoto:

scp ~/Desktop/myfile.txt john_doe@10.1.1.10:~/

Ricorda che ~ è una scorciatoia per la tua cartella home… ad esempio, /home/

Invia un file alla webroot:

scp ~/Documents/working/index.html john_doe@johndoe.com:/var/www/index.html

In questo esempio, l'utente john_doe avrebbe bisogno di privilegi di scrittura sulla directory remota /var/www.

5
5
5
2018-12-02 14:21:35 +0000

Su alcuni host, essi generano erroneamente .bash_profile per gli accessi non interattivi come scp. I messaggi che vengono stampati sul terminale possono causare che scp non funzioni correttamente. Se hai messaggi nel tuo .bash_profile questa può essere la causa.

Per avere ancora i tuoi messaggi di login, banner, etc. visualizzati nei login interattivi ed essere ancora in grado di usare scp attraverso un login non interattivo aggiungi il seguente prima di ogni messaggio che verrebbe stampato nel tuo file .bash_profile.

# **********If not running interactively, don't do anything more!***********

[-z "$PS1"] && return

Il codice alternativo è:

[[$- == *i*]] || return

E un altro codice alternativo:

case $- in
    *i*) ;;
      *) return;;
esac

che credo sia la versione più lunga del primo codice alternativo. Ho scoperto che su alcuni host il primo codice non funziona correttamente ma il secondo sì.

Durante un login scp non interattivo interromperà l'ulteriore esecuzione di .bash\profile e permetterà a scp di funzionare, ma mostrerà i messaggi di login quando si accede via ssh.

Nota: Questo può anche essere usato nel tuo file .bashrc se lo prelevi da .bash_profile (per $PATH) in modo che solo una parte di esso venga prelevata durante i login non interattivi.

0
0
0
2018-10-14 14:34:43 +0000

Stavo chiamando exec /bin/bash in .cshrc.

Rimuovendo questo ha risolto il problema per me.

0
0
0
2018-10-02 14:01:50 +0000

Questo non risponde direttamente alla domanda, ma potrebbe essere utile per gente come me, che cerca una soluzione con un scp che si blocca quando si trasferiscono file tra 2 host remoti.

Se scp si blocca a causa di messaggi da ssh, potrebbe aiutare a sopprimerli:

scp -o "StrictHostKeyChecking no"

e / o

scp -B

Dal manuale di scp:

-B Seleziona la modalità batch (evita di chiedere password o passphrase).

-o ssh_option Può essere usato per passare opzioni a ssh nel formato usato in non c'è un flag separato della linea di comando di scp. Per i dettagli completi delle opzioni elencate di seguito, e i loro possibili valori, vedere ssh_config(5).

Nel mio caso questo sembrava aiutare, ma non ha risolto l'intero problema. Non siamo riusciti a scoprire perché scp si blocca quando si trasferisce da remoto a remoto. Si blocca a metà del file. 9 volte ha funzionato, il tentativo numero 10 no. Abbiamo sospettato che potrebbe essere che si blocca quando la nostra connessione VPN riceve un picco di traffico per un momento e poi scp non si riprende. Si blocca davvero per sempre e non dà nemmeno un messaggio di errore.

Comunque, mi sono arreso e sono passato a sftp. Questo è ragionevolmente più veloce, poiché usa una connessione diretta tra gli host remoti. Dovete abilitare

Host example.com
    AgentForward yes

nel file ~/.shh/config della macchina che sta eseguendo lo script. Naturalmente questa è una soluzione solo se le macchine remote sono entrambe all'interno della vostra rete fidata.