Comment diriger un fichier distant vers stdout via scp ou sftp?

28

En utilisant ssh, il est facile d'imprimer le contenu d'un fichier en utilisant

ssh host 'cat file.txt'

Lorsque ssh est désactivé et que seul SFTP est activé, l'exécution de la commande précédente donne l'erreur suivante:

Ce service autorise uniquement les connexions sftp.

Pour contourner ce problème, je pourrais créer un fichier temporaire à l'aide de scpou sshfs(comme indiqué ci-dessous), mais cela semble vraiment moche. Quelle est la bonne façon d'imprimer le contenu d'un fichier distant lorsque SSH est désactivé?

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
la source

Réponses:

14

Curl peut afficher le fichier de la même manière que le ferait un chat. Pas besoin de supprimer le fichier car il affiche simplement la sortie sauf si vous lui demandez de faire autrement.

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

Si vous utilisez l'authentification par clé publique:

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

Si vous utilisez les emplacements par défaut, alors --keyet --pubkeypeuvent être omis:

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

Le nom d'utilisateur peut également faire partie de l'URL, le résultat final semble donc très proche de la commande ssh:

curl sftp://username@hostname/path/to/file.txt
brwtx
la source
Merci, exactement ce que je cherchais! J'ai édité votre réponse pour développer l'authentification par clé publique, il s'avère que la syntaxe est très similaire à la syntaxe ssh / sshfs. Si la commande curl échoue avec "curl: (51) Le certificat d'homologue SSL ou la clé distante SSH n'était pas OK", ajoutez simplement l' -kindicateur ( --insecure).
Rob W
28

Pour les personnes qui peuvent courir scp, vous pouvez faire ceci:

scp remotehost:/path/to/remote/file /dev/stdout
Kenster
la source
Aucune des deux méthodes ne fonctionne. Le premier est équivalent à la ligne unique sftp username@hostname:/path/to/file.txt /dev/stdoutet se traduit par "Impossible d'écrire dans" / dev / stdout ": Recherche illégale". La deuxième commande échoue et montre l'erreur qui est affichée au bas de ma question.
Rob W
Le formulaire SFTP fonctionne bien pour moi. Cela peut dépendre de la version du logiciel ssh que vous utilisez. Concernant scp, j'ai dit "si scp fonctionne". Vous avez établi dans votre question que le serveur ne vous permettait pas d'exécuter scp, donc naturellement la commande scp échouerait pour vous.
Kenster
ssh -Vdonne OpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014. scp échoue car il utilise ssh sous le capot, et ssh est désactivé (par mesure de sécurité, voir par exemple serverfault.com/questions/354615/allow-sftp-but-disallow-ssh )
Rob W