2015-06-25 2 views
0

Я регулярно подключаюсь к нескольким системам через ssh с использованием нескольких переходов. Также часто бывает, что я хочу скопировать файл из системы назначения в мою локальную систему или наоборот способом (мой текущий рабочий процесс копирует файл во внешнее местоположение, которое обе машины могут видеть так, чтобы оно сохраняет мне несколько перелетов или если файл не является бинарным котом и копирует/вставляет его в другое окно терминала). Есть ли простой способ сделать такое?scp между двумя терминальными окнами (или multihop scp)

Я использую OSX и iterm2 (очевидно, я не могу изменить последнее).

Так соединение что-то вроде (локальная машина) -> (портал A) -> (машина B) -> (портальный C) -> (машина D)

Так что я хотел бы, чтобы скопировать файлы из машина A к машине D простым способом (без копирования файла через все перелеты или создание четырех туннелей).

+0

К сожалению, я думаю, что у вас есть свои возможности.Не уверен в том, что проще, чем использовать внешнее местоположение, доступное для обеих машин. Я сталкиваюсь с этим все время и в конечном итоге делаю несколько туннелей. –

ответ

0

Это не совсем то, о чем вы просите, но есть некоторые трюки, которые вы можете играть с прокси-сервером SSH, которые упрощают этот вид вещь чрезвычайно. Первое, что нужно знать, - это прокси-соединение через SSH через netcat. Если у вас есть OpenSSH версии 5.4 или более поздней версии на различных хостах, добавить что-то вроде этого в ваш ~/.ssh/конфигурации:

Host B 
    ProxyCommand ssh A -W %h:%p 

Host C 
    ProxyCommand ssh B -W %h:%p 

Host D 
    ProxyCommand ssh D -W %h:%p 

Если какой-либо из промежуточных не имеют достаточно новую версию, но есть Netcat (nc), вы можете использовать что-то вроде этого, вместо:

Host D 
    ProxyCommand ssh C nc %h %p 

Это сделает ssh D автоматически открыть туннель C, чтобы запустить соединение через, который будет автоматически открыть туннель B, ... вы вам нужно пройти аутентификацию 4 раза (до A, затем B и т. д.) (если у вас нет аутентификации с открытым ключом), но кроме этого она прозрачна. Это означает, что вы можете использовать его с sftp D, scp D:/path/to/file и т. Д.

Теперь у вас есть одно существенное ограничение по тому, что вы описываете. Вы можете, конечно, копировать файлы, например. А D, как это:

scp A:/path/to/file D:/path/to/file 

... но содержимое файла будет путешествовать по пути А -> компьютер -> A -> B -> C -> D. Они не будут храниться в любом месте этот путь, но если сетевая связь между вами и A медленная (например, вы работаете из дома), это будет узким местом. В этом случае было бы лучше всего скопировать записи ~/.ssh/config для C и D на компьютер A, ssh в A нормально, затем использовать scp /path/to/file D:/path/to/file и вырезать дополнительные перелеты.

Кстати, если вы хотите получить фантазии, вы можете добавить это в ~/.ssh/конфигурации:

Host */* 
    ProxyCommand ssh $(dirname %h) -W $(basename %h):%p 

И затем использовать ssh A/B/C/D и т.д., чтобы построили туннель пути на месте. См. the OpenSSH cookbook.

0

я должен был думать об этом в течение некоторого времени, но если вы настроили беспарольную аутентификацию с помощью клавиш, можно делать вещи, как это:

$ cat test | ssh f21 "tee | ssh f20 \"tee test\"" 

зашифрованный ключ SSH не имеет значения. Для передачи через один прыжок это довольно просто, для большего количества прыжков он может стать беспорядочным ...