Jak potokować zdalny plik do standardowego wyjścia przez scp lub sftp?

28

Za pomocą ssh można łatwo wydrukować zawartość pliku

ssh host 'cat file.txt'

Gdy ssh jest wyłączone i tylko SFTP jest włączone, uruchomienie poprzedniego polecenia powoduje następujący błąd:

Ta usługa zezwala tylko na połączenia sftp.

Aby obejść ten problem, mogłem utworzyć plik tymczasowy za pomocą scplub sshfs(jak pokazano poniżej), ale wygląda to naprawdę brzydko. Jaki jest właściwy sposób wydrukowania zawartości pliku zdalnego, gdy SSH jest wyłączony?

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.
źródło

Odpowiedzi:

14

Curl może wyświetlać plik w taki sam sposób, jak zrobiłby to kot. Nie trzeba usuwać pliku, ponieważ po prostu wyświetlał on dane wyjściowe, o ile nie powiesz inaczej.

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

Jeśli korzystasz z uwierzytelniania za pomocą klucza publicznego:

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

Jeśli korzystasz z domyślnych lokalizacji, możesz --keyi --pubkeymożesz je pominąć:

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

Nazwa użytkownika może być również częścią adresu URL, więc końcowy wynik jest bardzo zbliżony do polecenia ssh:

curl sftp://username@hostname/path/to/file.txt
brwtx
źródło
Dzięki, dokładnie tego szukałem! Zredagowałem twoją odpowiedź, aby rozwinąć uwierzytelnianie za pomocą klucza publicznego, okazuje się, że składnia jest bardzo podobna do składni ssh / sshfs. Jeśli polecenie curl nie powiedzie się z „curl: (51) Certyfikat peer SSL lub zdalny klucz SSH nie był OK”, po prostu dodaj -kflagę ( --insecure).
Rob W
28

Dla osób, które potrafią biegać scp, możesz to zrobić:

scp remotehost:/path/to/remote/file /dev/stdout
Kenster
źródło
Żadna z metod nie działa. Pierwszy z nich jest równoważny jednoliniowemu sftp username@hostname:/path/to/file.txt /dev/stdouti powoduje „Nie można pisać do” / dev / stdout: Nielegalne wyszukiwanie ”. Drugie polecenie kończy się niepowodzeniem i pokazuje błąd wyświetlany na dole mojego pytania.
Rob W
Formularz SFTP działa dla mnie dobrze. Może to zależeć od używanej wersji oprogramowania ssh. Jeśli chodzi o scp, powiedziałem „jeśli scp działa”. Ustaliłeś w swoim pytaniu, że serwer nie pozwala ci na wykonanie scp, więc naturalnie polecenie scp nie powiedzie się.
Kenster,
ssh -Vdaje OpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014. scp kończy się niepowodzeniem, ponieważ używa ssh pod maską, a ssh jest wyłączone (jako środek bezpieczeństwa, patrz np. serverfault.com/questions/354615/allow-sftp-but-disallow-ssh )
Rob W