Wenn ich etwas per scp an den Server senden möchte:
$ scp file server:
_____ _____ _____
$
Dann werden drei Zeilen gedruckt und die Datei wird nicht kopiert. Ich kann mich jedoch problemlos über ssh mit dem Server verbinden:
$ ssh server
Wie kann man scp zum Laufen bringen?
scp file server:
die Datei beim Ausführen (vorausgesetzt, "Server" ist ein gültiger Hostname) in Ihr Kontoverzeichnis kopiert.scp
, einen anderen Ort auf dem Server, dann einecp
odermv
nachssh
Antworten:
Eine mögliche Ursache für diese Art von Verhalten ist der Ausdruck einer Nachricht während des Anmeldevorgangs auf dem Server. Scp ist auf ssh angewiesen, um einen vollständig transparenten, verschlüsselten Tunnel zwischen dem Client und dem Server bereitzustellen.
Überprüfen Sie alle Anmeldeskripts auf dem Server und versuchen Sie, einen anderen Benutzer zu verwenden. Eine andere Methode zum Ermitteln der Fehlerquelle besteht darin, das -v im Befehl zu verwenden, um den Fortschritt der Transaktion zu verfolgen und festzustellen, wo der Fehler auftritt. Bei Bedarf können Sie die Ausführlichkeit mit bis zu -vvv erhöhen. Das Überprüfen der verschiedenen Formen von scp kann auch aufschlussreich sein, wie in dem Beitrag von InChargeOfIT aufgeführt.
scp baut unter der Haube einen Tunnel mit ssh auf und überträgt die Datei dann über diesen Tunnel mit einem ssh-Befehl am anderen Ende, um die Datei zu fangen, sobald sie ankommt. Dies wird durch die Verwendung von tar und ssh zum Kopieren einer Verzeichnisstruktur unter Beibehaltung der Besitz- und Erstellungszeiten mit den folgenden Befehlen veranschaulicht:
um es zu senden, und
um es zurückzubekommen.
quelle
enable
ein Passwort eingeben und eingeben kann, heißt das nicht, dass er Privileg 15 ist. Wenn Sie nicht irgendwo in "Privileg 15" sehenshow run | inc USERNAME
, können sie scp nicht ausführen.export SHELL=/bin/zsh
) in ändern~/.bashrc
. Dies wird manchmal in Abwesenheit von verwendetchsh
.Überprüfen Sie die .bashrc-Datei oder eine entsprechende Datei des Zielbenutzers. ~ / .bashrc wird für nicht interaktive Anmeldungen verwendet. Wenn es ein Echo oder einen Befehl gibt, der etwas ausgibt, wird das SCP-Protokoll verletzt.
quelle
fortune | cowsay
, legen Sie es einfach in .bash_profile. Dies ist nur für interaktive Anmeldungen gedacht und sollte nicht während der SCP-Sitzung verwendet werden..bashrc
, die auf der anderen Maschine nicht existieren würde. Sie können die Logik in dieser Antwort verwenden , um zu überspringen,~/.bashrc
wenn Sie nicht interaktiv sind (was der Fall istscp
).Bearbeiten: Sind Sie sicher, dass Sie im Befehl scp einen gültigen Pfad eingeben? Zum Beispiel:
wird fehlschlagen (in der Tat wird es nur den Befehl ausdrucken, wie Sie sehen). In diesem Fall müssen Sie einen gültigen Pfad zum Remote-Server angeben.
scp test.txt [email protected]:~/
Beispielverwendungen:
Sende eine Datei:
Holen Sie sich eine Datei:
Beispiele:
Senden Sie eine Datei von meinem Desktop an meinen privaten Ordner auf einem Remote-Server:
Denken Sie daran, das
~
ist eine Verknüpfung für Ihr Home-Verzeichnis ... zB / home /Senden Sie eine Datei an die Webroot:
In diesem Beispiel benötigt der Benutzer john_doe Schreibrechte für das ferne Verzeichnis / var / www.
quelle
------
... keines Ihrer Beispiele bezieht sich darauf.scp somefile [email protected]:
nicht über die richtigen Berechtigungen für das Remote-Verzeichnis verfügen, treten ebenfalls Probleme auf. Bearbeitet meine Antwort, um es ein wenig klarer zu machenAuf einigen Hosts wird fälschlicherweise
.bash_profile
nach nicht interaktiven Anmeldungen wie scp gesucht. Meldungen, die an das Terminal gesendet werden, können möglicherweise dazu führenscp
, dass sie nicht richtig funktionieren. Wenn Sie Nachrichten in Ihrem.bash_profile
haben, kann dies die Ursache sein.Damit Ihre Anmeldemeldungen, Banner usw. weiterhin in interaktiven Anmeldungen angezeigt werden und weiterhin
scp
über eine nicht interaktive Anmeldung verwendet werden können, fügen Sie vor jeder Meldung, die in Ihrer.bash_profile
Datei ausgedruckt wird, Folgendes hinzu .Alternativer Code ist:
Und noch ein alternativer Code:
Was ich glaube, ist die längere Version des ersten alternativen Codes. Ich habe festgestellt, dass auf einigen Hosts der erste Code nicht richtig funktioniert, der zweite jedoch.
Während einer nicht interaktiven scp-Anmeldung wird die weitere Ausführung von .bash_profile abgebrochen und ermöglicht, dass scp funktioniert. Ihre Anmeldemeldungen werden jedoch angezeigt, wenn Sie sich über ssh anmelden.
Hinweis: Dies kann auch in Ihrer
.bashrc
Datei verwendet werden, wenn Sie sie aus.bash_profile
(für $ PATH) beziehen, sodass bei nicht interaktiven Anmeldungen nur ein Teil davon bezogen wird.quelle
Dies beantwortet die Frage nicht direkt, kann aber für Leute wie mich hilfreich sein, die nach einer Lösung mit einem einfrierenden scp suchen, wenn sie Dateien zwischen zwei Remote-Hosts übertragen.
Wenn sich
scp
ssh aufgrund von Nachrichten aufhängt, kann dies dazu führen, dass sie unterdrückt werden:und / oder
In meinem Fall schien das zu helfen, hat aber nicht das ganze Problem gelöst. Wir konnten nicht herausfinden, warum scp bei der Übertragung von Remote zu Remote hängen bleibt. Es hing in der Mitte der Akte. 9 Mal hat es funktioniert, Versuch Nummer 10 nicht. Wir vermuteten, dass es sein könnte, dass es hängt, wenn unsere VPN-Verbindung für einen Moment eine Verkehrsspitze bekommt und scp sich dann nicht erholt. Es hängt wirklich nur für immer und gibt nicht einmal eine Fehlermeldung.
Allerdings habe ich aufgegeben und auf sftp umgestellt. Dies ist einigermaßen schneller, da eine direkte Verbindung zwischen den Remotehosts verwendet wird. Sie müssen aktivieren
in der ~ / .shh / config-Datei des Rechners, auf dem das Skript ausgeführt wird. Dies ist natürlich nur eine Lösung, wenn sich beide Remote-Computer in Ihrem vertrauenswürdigen Netzwerk befinden.
quelle
Ich rufe
exec /bin/bash
in.cshrc
.Das Entfernen löste das Problem für mich.
quelle