Назад | Перейти на главную страницу

Пропустить промежуточный сервер через SSH

Меня только что наняли для работы в лаборатории с большим кластером Linux. Я парень Mac / Windows, поэтому я все еще пытаюсь понять, как перемещаться, используя командную строку nix. Пока я не сталкивался с какими-либо реальными проблемами, но я столкнулся с примерно 5000 различных мелких неприятных вещей, связанных с изучением новой системы.

На данный момент самое большое раздражение заключается в следующем: по какой-либо причине (безопасность, что-то о том, как настроены эти серверы, о чем я еще не знаю достаточно, и т. Д.) При входе в кластер из-за пределов кампуса через SSH у вас сначала есть через SSH на старый imac, который стоит на столе в лаборатории, а затем через SSH в кластер. Я использовал команду SCP для копирования файлов с моего домашнего Mac в кластер:

сначала в одном окне терминала:

 my-home-mac:scp file userA@XXX.XXX.XXX.XXX:~/target

затем в другом окне терминала (в котором я вошел в лабораторный imac):

 lab-imac:scp file userB@YYY.YYY.YYY.YYY:~/target

и проблема в том, что каждый раз, когда я это делаю, я вынужден сначала SCP файлы в лабораторный imac (и ввести один пароль), а затем SCP файлы оттуда в кластер (и ввести другой пароль). Я пытаюсь помочь разработать эту программу на языке C, которая разделена на 4 дюжины файлов, поэтому я перемещаю много файлов, и это сводит меня с ума.

Думаю, мне придется изучить сценарий оболочки, но пока что, просто чтобы приступить к работе, у меня есть несколько вопросов:

  1. как я могу настроить терминал на моем домашнем Mac, чтобы мне не приходилось всегда вводить пароли для лабораторного imac или кластера?

  2. Есть ли способ передать файлы SCP (или какой-либо другой команды) прямо с моего домашнего Mac в кластер, минуя промежуточное звено?

  3. Есть ли способ настроить Fugu (или любой другой SSH-клиент с графическим интерфейсом, если на то пошло) на моем домашнем Mac, чтобы он мог учитывать промежуточный сервер (лабораторный imac) и действовать так, как будто он подключает меня напрямую к кластер?

Я физик, а все остальные в лаборатории - биологи, и парень, который все это создал, давно ушел, поэтому я обращаюсь к вам, ребята, всем вам в замечательном сообществе переполнения стека, чтобы дайте мне руку здесь. Спасибо.

В SSH вы можете настроить автоматическое переключение промежуточных узлов с помощью записей Host и ProxyCommand, см. этот

Чтобы не вводить пароль, см. эта ссылка

Вы можете настроить ключи, чтобы не вводить пароли. Я уверен, что это уже упоминалось здесь раньше (см. Как использовать открытый ключ SSH с удаленного компьютера?; намек ssh-keygen), и я всегда использую клиент командной строки OpenSSH (установленный с финк на моем Mac с локальным диспетчером пакетов в Linux), поэтому я не буду обращаться к глупым квазиграфическим клиентам.

Рецепт пересылки ssh или scp через шлюз

Вам понадобятся две командные строки на исходной машине (которую я назову ориг). Шлюз называется воротами, а пункт назначения - назначением.

Первая командная строка:

orig$ ssh -L 1111:dest.tld:22 gate.tld

Это связывает порт 1111, исходящий на происхождение на порт 22 входящий dest через туннель ssh через Ворота.

Теперь, если вам понадобится эта переадресация на какое-то время, настройте ее на выполнение чего-то, что не позволит сеансу истечь по тайм-ауту. я использую top.

Вторая командная строка:

orig$ ssh -p 1111 username_on_dest@localhost

или

orig$ scp -P 1111 path/to/file/on/orig/filename username_on_dest@localhost:path/on/dest/new_filename

(обратите внимание, что опция указания порта использует разные заглавные буквы для ssh и scp... arghhh!) Прочтите документацию, чтобы узнать, как с этим можно поиграть, но это основная схема. Очень полезно, если вы регулярно используете ресурсы, которые не доступны в общедоступной сети по соображениям безопасности.

Чтобы не вводить пароли повсюду, используйте ключи SSH. Есть много ресурсов здесь на SU и в другом месте о том, как это сделать. Один совет: всегда ставьте кодовую фразу на свой ключ!

Чтобы «обойти» шлюз Mac и получить прямой доступ к лабораторным машинам, вам необходимо использовать возможности туннелирования SSH. Вы устанавливаете связь между домашним Mac и Mac-шлюзом лаборатории, перенаправляя порты локального Mac на компьютеры в лаборатории. Затем вы подключаетесь к локальному компьютеру Mac через эти определенные порты, и вместо этого трафик перенаправляется на лабораторный компьютер.

Учитывая следующее:

  • LABIMAC = шлюз Mac
  • LAB01 = сервер №1 в лаборатории за шлюзом
  • LAB02 = сервер №2 в лаборатории за шлюзом
  • LABNN = сервер №N в лаборатории за шлюзом

У вас может быть командная строка SSH, которая выглядит следующим образом:

ssh -L 2001:LAB01:22 -L 2002:LAB02:22 2003:LABNN:22 joe@LABIMAC

для создания туннелей, а затем выполните отдельные команды SSH для лабораторных компьютеров:

ssh -p 2001 joe@localhost
ssh -p 2002 joe@localhost
ssh -p 2003 joe@localhost

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

host LAB01
hostname localhost
port 2001

host LAB02
hostname localhost
port 2002

host LAB03
hostname localhost
port 2003

Затем вы можете пропустить порт и localhost в командной строке и сделать что-то более естественное, как только туннель к Mac лаборатории будет установлен:

ssh joe@LAB01

Вы даже можете упростить создание туннеля, используя файл конфигурации:

host LABIMAC
LocalForward 2001 LAB01:22
LocalForward 2002 LAB02:22
LocalForward 2003 LABNN:22

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

ssh joe@LABIMAC

(и во втором окне)

ssh joe@LAB01

Вы также можете изучить использование autossh чтобы первоначальное туннельное соединение оставалось открытым в периоды бездействия.

Еще одним усовершенствованием для замены второй команды является использование FileZilla в качестве графического интерфейса для перетаскивания между локальными и удаленными машинами, если вы уже настроили туннелирование.

orig$ ssh -L 1111:dest.tld:22 gate.tld

Это может позволить вам загружать файлы.

1) Уже ответил: SSH-ключи - Автоматический вход - Без пароля и Более безопасный.

|||||||

2) Перенесите файлы с помощью rsync:

(т.е.) Использование порта 22:

rsync -av -e ssh / var / files / mysource / root@68.x2x.27.1xx: / var / waytogo / пример

Использование другого порта (рекомендуется)

rsync -av -e 'ssh -p 34xx' / var / files / mysource / root@68.x2x.27.1xx: / var / waytogo / пример

^^^

В приведенном выше примере не удаляются лишние файлы, оставшиеся на целевом сервере.

||||||||||||

3a) Клиентам SSH на самом деле не нужен графический интерфейс, PuTTy прост и увлекателен после небольшого обучения. : o)

3b) Переадресация при входе в систему может быть скриптом; Для полуавтоматического режима просто создайте псевдоним команды, и вы нажмете одно или два клавиши.

Примечание: псевдонимы очень легко выучить, в Linux отредактируйте /root/.bashrc

alias job='ssh -p 34xx root@68.x2x.27.1xx'

Теперь просто введите «задание» в качестве команды, и вы войдете на другой компьютер (используя свои SSH-ключи).