Wie leitet man eine entfernte Datei über scp oder sftp an stdout weiter?

28

Mit ssh ist es einfach, den Inhalt einer Datei mit zu drucken

ssh host 'cat file.txt'

Wenn ssh deaktiviert und nur SFTP aktiviert ist, wird beim Ausführen des vorherigen Befehls der folgende Fehler angezeigt:

Dieser Dienst erlaubt nur SFTP-Verbindungen.

Um dieses Problem zu umgehen, könnte ich mit scpoder eine temporäre Datei erstellen sshfs(siehe unten), aber das sieht wirklich hässlich aus. Wie kann der Inhalt einer Remote-Datei gedruckt werden, wenn SSH deaktiviert ist?

mkdir tmpdir
sshfs host: tmpdir
cat tmpdir/file.txt
fusermount -u tmpdir

# This does not work! scp -v host:file.txt . shows
# "Sink: This service allows sftp connections only."
scp host:file.txt .
cat file.txt
rm file.txt
Rob W
quelle

Antworten:

14

Curl kann die Datei genau so anzeigen, wie es cat tun würde. Sie müssen die Datei nicht löschen, da sie nur die Ausgabe anzeigt, es sei denn, Sie weisen sie an, etwas anderes zu tun.

curl -u username:password sftp://hostname/path/to/file.txt

Wenn Sie die Authentifizierung mit öffentlichem Schlüssel verwenden:

curl -u username: --key ~/.ssh/id_rsa --pubkey sftp://hostname/path/to/file.txt

Wenn Sie die Standardverzeichnisse verwenden, dann --keyund --pubkeykann entfallen:

curl -u username: sftp://hostname/path/to/file.txt

Der Benutzername kann auch Teil der URL sein, sodass das Endergebnis dem Befehl ssh sehr nahe kommt:

curl sftp://username@hostname/path/to/file.txt
brwtx
quelle
Danke, genau das, wonach ich gesucht habe! Ich habe Ihre Antwort bearbeitet, um die Authentifizierung mit öffentlichen Schlüsseln zu erweitern. Es stellt sich heraus, dass die Syntax der von ssh / sshfs sehr ähnlich ist. Wenn der Befehl curl mit "curl: (51) SSL-Peer-Zertifikat oder SSH-Remote-Schlüssel nicht OK" fehlschlägt, fügen Sie einfach das -kFlag ( --insecure) hinzu.
Rob W
28

Für Leute, die rennen können scp, können Sie dies tun:

scp remotehost:/path/to/remote/file /dev/stdout
Kenster
quelle
Keine der beiden Methoden funktioniert. Der erste entspricht dem Einzeiler sftp username@hostname:/path/to/file.txt /dev/stdoutund führt zu "Konnte nicht an" / dev / stdout schreiben: Illegale Suche ". Der zweite Befehl schlägt fehl und zeigt den Fehler an, der am Ende meiner Frage angezeigt wird.
Rob W
Das SFTP-Formular funktioniert gut für mich. Dies hängt möglicherweise davon ab, welche Version der SSH-Software Sie verwenden. In Bezug auf scp habe ich gesagt, "ob scp funktioniert". Sie haben in Ihrer Frage festgestellt, dass der Server nicht zulässt, dass Sie scp ausführen. Daher schlägt der Befehl scp natürlich für Sie fehl.
Kenster
ssh -Vgibt OpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014. scp schlägt fehl, weil ssh unter der Haube verwendet wird und ssh deaktiviert ist (als Sicherheitsmaßnahme siehe zB serverfault.com/questions/354615/allow-sftp-but-disallow-ssh )
Rob W