Как передать удаленный файл в стандартный вывод через scp или sftp?

28

Используя ssh, легко распечатать содержимое файла, используя

ssh host 'cat file.txt'

Когда ssh отключен и включен только SFTP, выполнение предыдущей команды приводит к следующей ошибке:

Этот сервис разрешает только sftp-соединения.

Чтобы обойти эту проблему, я мог бы создать временный файл, используя scpили sshfs(как показано ниже), но это выглядит очень некрасиво. Как правильно распечатать содержимое удаленного файла, когда SSH отключен?

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
Роб W
источник

Ответы:

14

Curl может отображать файл так же, как кошка. Нет необходимости удалять файл, так как он просто отображает выходные данные, если вы не скажете ему сделать иначе.

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

Если вы используете аутентификацию с открытым ключом:

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

Если вы используете расположение по умолчанию, то --keyи --pubkeyможет быть опущено:

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

Имя пользователя также может быть частью URL, поэтому конечный результат выглядит очень близко к команде ssh:

curl sftp://username@hostname/path/to/file.txt
brwtx
источник
Спасибо, именно то, что я искал! Я отредактировал ваш ответ, чтобы расширить аутентификацию с открытым ключом, оказалось, что синтаксис очень похож на синтаксис ssh / sshfs. Если команда curl завершается с ошибкой «curl: (51) SSL-сертификат равноправный или удаленный ключ SSH не был в порядке», просто добавьте -kфлаг ( --insecure).
Роб W
28

Для людей, которые могут бегать scp, вы можете сделать это:

scp remotehost:/path/to/remote/file /dev/stdout
Kenster
источник
Ни один из методов не работает. Первый эквивалентен однострочнику sftp username@hostname:/path/to/file.txt /dev/stdoutи приводит к «Не удалось записать в» / dev / stdout: «Недопустимый поиск». Вторая команда терпит неудачу и показывает ошибку, которая показана внизу моего вопроса.
Роб W
Форма SFTP у меня отлично работает. Это может зависеть от того, какую версию программного обеспечения ssh вы используете. Что касается scp, я сказал «работает scp». Вы установили в своем вопросе, что сервер не разрешает вам выполнять scp, поэтому, естественно, команда scp для вас не выполнится.
Кенстер
ssh -Vдает OpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014. Сбой scp, потому что он использует ssh под капотом, и ssh отключен (в качестве меры безопасности см., например, serverfault.com/questions/354615/allow-sftp-but-disallow-ssh )
Роб W