Я знаю, как использовать удаленный репозиторий CVS, где доступ к удаленному серверу через SSH.
Вот моя проблема: удаленный сервер CVS, назовите это, "A" доступен SSH только от компьютеров в той же подсети. Существует один компьютер "B" на подсети, которая имеет SSH, открытый для мира. (Не спрашивайте почему; я не администратор.) Я могу SSH в "B" и затем оттуда SSH в "A", где репозиторий CVS.
Мой домашний ПК не находится на той же подсети как "A" и "B". Действительно ли возможно получить доступ к репозиторию CVS на "A" посредством моих соединений SSH между моим домашним ПК и "B" и между "B" и "A"?
Ответ шарлатана является хорошим началом, но он имеет две проблемы. Таким образом я попробую его также:
Сначала необходимо создать туннель от локальной рабочей станции до порта 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
Необходимо смочь сделать это посредством туннелирования 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