Потрібно перейти на проміжний сервер?


11

Я не можу переходити безпосередньо до певного хоста. Щоб перемістити файл з домашньої машини на хост, я повинен перенести файл на проміжний хост; ssh в проміжний хост; і перетягніть файл до кінцевого пункту призначення. Чи можна уникнути такого безумства?

Відповіді:


28

На своїй локальній машині ви можете створити тунель am SSH через проміжний хост до кінцевого хоста:

ssh user@intermediate -L 2000:final:22 -N

Це відкриє порт 2000 на вашому localhost, який підключиться безпосередньо до кінцевого сервера на порту 22 шляхом тунелювання через проміжний хост. Тепер в іншому підказці підключіться до sftp на порт 2000, який потрібно тунелювати до кінцевого сервера, зазначивши, що вказаний тут користувач призначений для остаточного хоста:

sftp -P 2000 user@localhost

Схоже, це належить на superuser.com або serverfault.com, хоча.


Спасибі, я спробую це; і ти маєш рацію, це неправильний форум; вибачте.

Після надання користувачу @ localhost пароля я отримав повідомлення: Отримане повідомлення занадто довго 1131376238
user74094

14

Ви можете використовувати опцію ProxyCommand SFTP, щоб прозоро тунелювати SFTP-з'єднання через SSH-з'єднання (трохи схоже на відповідь WhiteFang34, але через stdin & stdout SSH-з'єднання, а не на переадресований локальний порт TCP):

sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost

(Це припустимо, що для проміжного хоста встановлено netcat як / usr / bin / nc - якщо ні, можливо, вам доведеться знайти / встановити еквівалентний спосіб шлюзу stdin & stdout в сеанс TCP.)

У цьому варіанті дійсно круто, що ви можете додати його до файлу ~ / .ssh / config, що робить його прозорим:

Host finalhost
    ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null

З цим записом ви можете використовувати sftp, scp та ssh для finalhost, і він автоматично викликатиме тунель. Єдина непрозора частина полягає в тому, що він запропонує два паролі (intermediatehost, за яким слідує finalhost), але якщо ви хочете, ви можете їх усунути також із SSH keypairs ...


Дякую Гордону. Він бере обидва паролі, а потім зупиняється з повідомленням: Отримане повідомлення занадто довго 1131376238
user74094

Це звучить як щось у зв’язку - можливо, сценарій входу на одному з хостів, можливо, nc - пише якийсь додатковий текст через з'єднання, яке заплутує sftp (див. Цей FAQ на сайті snailbook.com ). 1131376238 - це десяткове кодування символів ascii "Conn", тому це, ймовірно, повідомлення типу "Підключення до ..." "Підключено з ..." або, можливо, "З'єднання не вдалося". Спробуйте це з ssh замість sftp, подивіться, чи повідомлення друкується видимо, і, можливо, ви можете сказати, звідки воно надходить.
Гордон Девіссон

ssh спрацював чудово. Я також повинен зазначити, що я часто стикаюся з цим питанням: автентичність хоста "xxxxx (<немає хостипа для команди проксі>") не може бути встановлена. Відбиток ключа RSA - 37: 40: d4: c7: тощо. Ви впевнені, що хочете продовжувати з'єднання (так / ні)? так
користувач74094

Гордон, дуже корисно! Я додаю це до свого текстового файлу командного рядка fu oneliners. Дякую тонну!
Тревіс Лелеу

Чи execпотрібне? (Тут чудово працює без цієї частини.)
equaeghe

3

Ви можете передавати дані в ssh-процес, що працює на вашій машині, а потім запустити команду на проміжному апараті, яка читає stdin і надсилає їх в sftp, якщо це доречно.

Це можна зробити в онлайні на вашій локальній машині, хоча цитування аргументів до ssh вимагатиме обережності. Я зараз на своєму телефоні, тому, на жаль, не можу ввести деталі. Можливо, хтось ще може виконати цю відповідь як вправу!


0

Я припускаю, що кінцевий хост розгортається, і я можу лише здогадуватися про методи, які ви могли використовувати, щоб обійти його.

Наприклад - відкрийте ssh з вашої локальної машини, потім ssh на перший хост, потім ssh на другий і sftp від кінцевого хоста до вашої машини.


0

скажемо, що A і B - це перший і другий господарі. Файл, який потрібно скопіювати, є foo

Замість sftp ви можете використовувати наступне

котячий фу | ssh "кішка -> фу"

Тепер ви можете разом зробити це з 2-х ланцюжків

котячий фу | ssh "кішка - | ssh B \" кішка -> foo \ ""


Мені це подобається, тому я спробував це. Він взяв пароль для A, потім створив повідомлення: Не вдалося перевірити ключ хоста.
користувач74094
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.