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

scp werkt niet maar ssh wel

Als ik iets via scp naar server wil sturen:

$ scp file server:
                   __________  _____
$

, dan worden er drie regels afgedrukt en het bestand wordt niet gekopieerd. Ik kan echter zonder problemen via ssh verbinding maken met server:

$ ssh server

Hoe kan ik scp laten werken?

Antwoorden (6)

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

Een mogelijke oorzaak van dit soort gedrag is het laten afdrukken van elke boodschap tijdens het inlogproces op de server. Scp is afhankelijk van ssh om een volledig transparante versleutelde tunnel te bieden tussen de client en de server.

Controleer alle login scripts op de server, en probeer ook eens een andere gebruiker te gebruiken. Een andere methode om de bron van de fout te identificeren is om de -v in het commando te gebruiken, om de voortgang van de transactie te traceren, en te zien waar het mislukt. U kunt tot -vvv gebruiken om de verbositeit te verhogen, indien nodig. Het controleren van de verschillende vormen van scp kan ook leerzaam zijn, zoals vermeld in de post van InChargeOfIT.

scp, onder de motorkap, zet een tunnel op met ssh, en stuurt dan het bestand over die tunnel, met een ssh commando aan het andere eind om het bestand op te vangen als het overkomt. Dit wordt geïllustreerd door het gebruik van tar en ssh om een mappenstructuur te kopiëren met behoud van eigendom en aanmaaktijden met de volgende commando’s:

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

om het over te sturen, en

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

om het terug te krijgen.

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

Controleer het .bashrc of gelijkwaardig bestand van de doelgebruiker. ~/.bashrc wordt gebruikt voor niet-interactieve logins. Als er een echo of commando is dat iets uitvoert, zal dat het SCP protocol breken.

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

Bewerk: Weet je zeker dat je een geldig pad invoert in het scp commando? Bijvoorbeeld:

scp test.txt username@remoteserver.com

zal mislukken (in feite zal het gewoon het commando afdrukken zoals je ziet). In dit geval moet u een geldig pad opgeven naar de server op afstand… bijvoorbeeld, scp test.txt username@remoteserver.com:~/

Voorbeeldgebruiken:

Stuur een bestand:

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

Haal een bestand op:

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

Voorbeelden:

Stuur een bestand van mijn Bureaublad naar mijn thuismap op een externe server:

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

Onthoud dat de ~ een snelkoppeling is voor je thuismap… bijv. /home/

Stuur een bestand naar de webroot:

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

In dit voorbeeld zou de gebruiker john_doe schrijfrechten moeten hebben op de remote /var/www directory.

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

Op sommige hosts geven ze .bash_profile een onjuiste broncode voor niet-interactieve logins zoals scp. Berichten die naar de terminal worden geprint kunnen er mogelijk voor zorgen dat scp niet correct werkt. Als je berichten hebt in je .bash_profile kan dit de oorzaak zijn.

Om toch uw login-berichten, banner, enz. te laten verschijnen bij interactieve logins en toch in staat te zijn om scp te gebruiken via een niet-interactieve login, voeg het volgende toe vóór elk bericht dat zou worden afgedrukt in uw .bash_profile bestand.

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

[-z "$PS1"] && return

Alternatieve code is:

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

En nog een alternatieve code:

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

Wat volgens mij de langere versie is van de eerste alternatieve code. Ik heb ontdekt dat op sommige hosts de eerste code niet correct werkt, maar de tweede wel.

Tijdens een niet-interactieve scp login zal het verdere uitvoering van .bash_profile afbreken en scp toestaan om te werken, maar het zal uw login berichten tonen wanneer u inlogt via ssh.

Note: Dit kan ook in uw .bashrc bestand gebruikt worden als u het vanuit .bash_profile (voor $PATH) sourceert zodat slechts een deel ervan wordt gesourced tijdens niet-interactieve logins.

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

Ik riep exec /bin/bash aan in .cshrc.

Door dit te verwijderen is het probleem voor mij opgelost.

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

Dit beantwoordt de vraag niet direct, maar kan nuttig zijn voor mensen zoals ik, die een oplossing zoeken voor een vastgelopen scp bij het overzetten van bestanden tussen 2 hosts op afstand.

Als scp hangt vanwege berichten van ssh, zou dit kunnen helpen om ze te onderdrukken:

scp -o "StrictHostKeyChecking no"

en/of

scp -B

Uit de scp man:

-B Selecteert batch mode (voorkomt het vragen naar wachtwoorden of passphrases).

-o ssh_option Kan gebruikt worden om opties aan ssh door te geven in het formaat dat gebruikt wordt in Er is geen aparte scp command-line vlag. Voor volledige details van de onderstaande opties, en hun mogelijke waarden, zie ssh_config(5).

In mijn geval leek dat te helpen, maar loste niet het hele probleem op. We konden niet achterhalen waarom scp hangt bij het overzetten van remote naar remote. Het hing in het midden van het bestand. 9 keer werkte het, poging nummer 10 niet. We vermoedden dat het zou kunnen zijn dat hij hangt wanneer onze VPN verbinding even een verkeerspiek krijgt en dan herstelt scp zich niet. Het blijft gewoon hangen en geeft niet eens een foutmelding.

Ik heb het echter opgegeven en ben overgestapt op sftp. Dit is redelijk sneller, omdat het een directe verbinding gebruikt tussen de hosts op afstand. Je moet echter wel

Host example.com
    AgentForward yes

aanzetten in het ~/.shh/config bestand van de machine die het script draait. Dit is natuurlijk alleen een oplossing als de machines op afstand zich beide binnen je vertrouwde netwerk bevinden.