Как сделать удаленный CVS посредством нескольких соединений SSH

Я знаю, как использовать удаленный репозиторий CVS, где доступ к удаленному серверу через SSH.

Вот моя проблема: удаленный сервер CVS, назовите это, "A" доступен SSH только от компьютеров в той же подсети. Существует один компьютер "B" на подсети, которая имеет SSH, открытый для мира. (Не спрашивайте почему; я не администратор.) Я могу SSH в "B" и затем оттуда SSH в "A", где репозиторий CVS.

Мой домашний ПК не находится на той же подсети как "A" и "B". Действительно ли возможно получить доступ к репозиторию CVS на "A" посредством моих соединений SSH между моим домашним ПК и "B" и между "B" и "A"?

  • Не размещая другой репозиторий CVS на "B".
  • И не проверяя на "B" и синхронизируя мой домашний ПК с тем выездом.
2
задан 21.08.2011, 10:14

2 ответа

Ответ шарлатана является хорошим началом, но он имеет две проблемы. Таким образом я попробую его также:

Сначала необходимо создать туннель от локальной рабочей станции до порта SSH машины A. Это легко сделано из командной строки:

ssh -L 127.0.0.1:2200:A:22 B

(ssh к B и создают туннель из localport 127.0.0.1:2200 к удаленному порту A:22),

Поскольку CVS не позволяет Вам указывать порты при использовании :ext протокол, эта простая командная строка не будет достаточно хороша. Что необходимо сделать, вместо этого, создают или изменяют Ваш ~/.ssh/config файл:

Host B
   LocalForward 127.0.0.1:2200 A:22

Host tunnel2a
   Port 2200
   HostName 127.0.0.1

Это две записи. Первый говорит ssh создавать туннель каждый раз, когда Вы ssh к B. Второй определяет новое 'имя хоста' tunnel2a то, что можно использовать для cvs.

Во-первых, откройте туннель ssh'ing к B:

ssh B

CVS должен теперь работать как этот:

cvs -d :ext:username@tunnel2a:/cvsroot/ checkout someModule
3
ответ дан 08.12.2019, 06:37

Необходимо смочь сделать это посредством туннелирования SSH. У меня нет 3 машин для тестирования с, но если я понимаю право процесса, Вы хотите 2 окна терминала.

В первом, SSH к "B" с этой опцией: -L 1234:A:22. Это добавит туннель между localhost, в порте 1234, через машину "B", к машине "A", в порте 22 (порт SSH).

Команда CVS, которую я первоначально записал, не работает, так как CVS не поддерживает порты в: расширение: формат, поскольку я записал. При использовании IDE GUI или клиента CVS, это может позволить Вам вводить альтернативный порт непосредственно. При выполнении этого с клиентом командной строки Вам будет нужен другой маршрут - добавление псевдонима хоста к Вашему ~/.ssh/config файл с правильным портом. Ответ Manni дает яркий пример для того, как это сделано, таким образом, я не воспроизведу это здесь.

Путем стремления к порту 1234 на localhost Вы совершите нападки, SSH туннелируют и направляются к порту SSH на A.

Вы могли бы хотеть проверить ответы на некоторые связанные вопросы о туннелировании SSH. Благодарен за то, что Manni помогает мне победить эти инструкции в форму.

Во втором терминале, выполненном Ваша команда контроля CVS, но замена localhost:1234 для A:

cvs -d :ext:username@localhost:1234:/cvs checkout test
# instead of
# cvs -d :ext:username@A:/cvs checkout test

1
ответ дан 08.12.2019, 06:37

Теги

Похожие вопросы