Вопрос: Как мне сделать перенос MultiPOP SCP?
Я хочу скопировать файл с моего компьютера A на сервер C, но иметь доступ только к серверу C через сервер B.
Вместо первой передачи на сервер B, войдите в систему, а затем перейдите на сервер C, можно ли перенести файл напрямую с помощью SCP или подобных программ?
(Emacs tramp-mode имеет эту функцию для удаленного редактирования файлов).
74
2017-07-08 12:09
Источник
Ответы:
Предполагая OpenSSH, добавьте в свою конфигурацию SSH в .ssh / config
Host distant
ProxyCommand ssh near nc distant 22
Это приведет к тому, что SSH сможет подключиться «напрямую» к машине, названной «далекой», проксимировав через ближайший компьютер. Затем он может использовать приложения, такие как scp и sftp, на удаленную машину.
Для этого вам нужно установить «nc» aka netcat на ближайшую машину. Но многие современные системы уже будут иметь это.
Решение taro для towo более эффективно для проблем с одним выстрелом, предполагая, что вы запомнили синтаксис и правила работы tar.
43
2017-07-08 12:25
Можете добавить -o
варианты scp
вместо .ssh/config
,
scp -o ProxyCommand="ssh $jump_host nc $host 22" $local_path $host:$destination_path
$jump_host
это ваш «сервер B» в этом случае.
40
2018-01-11 17:30
С более поздними версиями ssh на сервере рядом с машиной (B) последующее будет работать без netcat:
Host distant
ProxyCommand ssh near -W distant:22
Тем не менее для этого требуется, чтобы AllowTcpForwarding было да (по умолчанию) на ближней (B) машине
изменить: требуется OpenSSH 5.4+ на B
19
2018-03-20 01:04
Вы можете использовать ssh для сервера B, используя что-то вроде
ssh -L 5022:<server C IP>:22 <user_serverB>@<server B IP>
Затем вы можете использовать ssh для использования на сервере C
ssh -p 5022 <user_serverC>@localhost
Аналогично scp будет работать с использованием
scp -P 5022 foo.txt <user_serverc>@localhost:
Не забудьте использовать правильный случай p с scp и ssh
14
2017-07-08 13:02
Если вы хотите быть действительно злым, вы можете цепью ssh и tar, что-то вроде tar c mydir | ssh server "ssh otherserver | tar x"
, но это может столкнуться со всеми проблемами.
Более простым способом было бы просто создать туннель SSH со встроенными методами SSH; взгляните на -D
переключитесь на man-страницу и просто переместите какой-то порт на порт ssh другого сервера.
3
2017-07-08 12:16
Это возможно и относительно легко, даже если вам нужно использовать сертификаты для аутентификации (типичные для AWS-сред).
Приведенная ниже команда скопирует файлы с remotePath
на server2
прямо в вашу машину на localPath
, Внутренний запрос scp проксируется через server1
,
scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>
Другой способ работы (файл загрузки):
scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" <localpath> user2@server2:/<remotePath>
Если вместо этого используется проверка подлинности с паролем,
scp -o ProxyCommand="ssh -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>
Если вы используете одни и те же учетные данные пользователя на обоих серверах:
scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>
2
2017-10-08 01:24
Вы также можете сделать это в обратном порядке и, возможно, проще.
Предположим, что у вас есть сеанс ssh, открытый с помощью компьютера, на который вы хотите отправить файл. Этот ПК с самым большим ходом, мы будем называть этот hop2. Ваш хост «proxy» будет hop1. ПК, который является файловым источником, мы будем называть это происхождение.
origin:~/asdf.txt --> hop1 --> hop2:~/asdf.txt
Вы можете создавать туннели, создавая локальный порт, доступный на удаленном ПК. Таким образом, мы определяем порт для открытия на удаленном ПК, который будет перенаправлен на порт, который вы перетащили с собой, когда строили туннель.
На hop2:
ssh -R 5555:127.0.0.1:22 <hop1_user>@<hop1_IP>
#this has the effect of building a tunnel from hop2 to hop1, making hop2's port 22 available on hop1 as port 5555
Теперь в этом открытом сеансе туннеля вы можете сделать то же самое с hop1 на file_origin.
На hop1:
ssh -R 6666:127.0.0.1:5555 <origin_user>@<origin_IP>
#this has the effect of building a tunnel from hop1 to origin while also pulling the active tunnel with it, making hop1's port 5555 (hop2's port 22) available on origin as port 6666.
Теперь вы туннелированы из hop2 в hop1 в начало. Кстати, теперь оба порта 5555 и 6666 открыты по происхождению, которые перенаправляются на порт 22 хопа2. В течение этого сеанса оба из следующих действительных маршрутов scp для hop2:
О происхождении:
scp -P 6666 ~/asdf.txt <hop2_user>@<127.0.0.1>:~/asdf.txt
Таким образом, вы можете иметь какое-то произвольное количество переходов между ними, и с ними проще работать с точки зрения объединения более двух прыжков.
2
2017-11-18 20:22
Попробуйте адаптировать следующий пример конфигурации openssh для настройки, которая может использоваться для нескольких хостов:
Host uat-*
ProxyCommand ssh bastion-uat nc %h %p
Это предполагает набор серверов, которые начинаются с «uat-», которые доступны только через сервер перехода / шлюза «bastion-uat». Возможно, вы также захотите добавить ForwardAgent yes
если вы используете ключ для входа в систему.
1
2018-06-25 10:33
Это не scp (запрошенный OP), но я нашел его очень простым в использовании rsync
для копирования с локального на удаленный в течение одного хопа с:
rsync -v -e 'ssh -A -t user@jumpserver ssh -A -t user@destinationserver' /path/to/sourcefile :/path/to/destination
Источник: http://mjbright.blogspot.com/2012/09/using-rsync-over-multi-hop-ssh.html
Я попробовал предложение -o ProxyPass выше и не хотел менять конфигурацию для меняющихся потребностей. Как указано автором в ссылке выше, целевой файл, предшествующий двоеточию (:), важно указать указанный путь на целевом сервере. Кроме того, используя rsync, у вас есть варианты сравнения дат, синхронизации папки и т. Д. Я надеюсь, что это поможет кому-то!
0
2017-12-21 17:07