Як передавати віддалений файл для stdout через 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

Відповіді:


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

Дякую, саме те, що я шукав! Я відредагував вашу відповідь, щоб розширити аутентифікацію відкритого ключа, виявилося, що синтаксис дуже схожий на синтаксис ssh / sshfs. Якщо команда curl не відповідає "curl: (51) Сертифікат однорангового SSL або дистанційний ключ SSH не був у порядку", просто додайте -kпрапор ( --insecure).
Роб Ш

28

Для людей, які можуть бігати scp, ви можете зробити це:

scp remotehost:/path/to/remote/file /dev/stdout

Жоден метод не працює. Перший еквівалентний однолінійному sftp username@hostname:/path/to/file.txt /dev/stdoutі призводить до "Не вдалося записати в" / dev / stdout ": Незаконне пошук". Друга команда виходить з ладу і показує помилку, яка відображається внизу мого питання.
Роб Ш

Форма 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 )
Rob W
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.