SSH туннелирование меня очень смущает. Мне интересно, могу ли я сделать это в Linux.
У меня 3 машины ..
A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.
Так что я могу SSH от A -> B и от B -> C, но не от A -> C.
Есть ли способ настроить SSH-туннель от A до B, поэтому, когда я запускаю другие SSH-команды, они просто работают с моей локальной машины A? Я в основном пытаюсь клонировать git-репозиторий с работы на дом (и я не могу установить git на компьютер B).
Кроме того, после настройки .. Как бы я также отключил его?
Ответы:
Поместите это в свой
.ssh/config
файл на hostA (подробнее см. Man 5 ssh_config ):Теперь следующая команда автоматически туннелирует через hostB
Возможно, вы захотите добавить такие параметры, как
-oCiphers=arcfour
и,-oClearAllForwardings=yes
чтобы ускорить процесс, так как упаковкаssh
внутриssh
вычислительно дороже, и дополнительные усилия и оболочка не должны быть такими же безопасными, когда они туннелируют уже зашифрованный трафик.Если вы используете OpenSSH ранее, чем 5.3,
-W
опция недоступна. В этом случае вы можете реализовать вышеизложенное с помощью netcat (nc
):источник
-W
Вариант следует использовать вместоnc
опции.-W
, только один на hostA (источник) или также на hostB (средний компьютер)?hostB
, можно объявить несколькоHost hostC
строк выше,ProxyCommand
чтобы было очень легко получить доступ к нескольким хостам через промежуточный сервер.Редактировать: это неправильный подход. Вместо этого смотрите ответ Эфимента . Этот ответ будет работать, но потенциально менее безопасен и определенно менее удивителен.
Похоже, вы хотите решение, подобное следующему:
Это даст вам оболочку
machineb
. Оставь это в покое. сверните окно терминала.Теперь, когда вы устанавливаете ssh-соединение с
localhost
, вы на самом деле будете подключеныmachinec
черезmachineb
. Когда вы закончите с туннелем, просто закройте терминал, в котором вы выполнили вышеуказанную команду.Обратите внимание, что вам понадобятся привилегии суперпользователя для запуска команды.
источник
-p 8022
в ваши команды ssh. С помощью git все очень просто: используйте URIssh://localhost:8022/path/to/repo.git
.Похоже, вам нужен псевдоним оболочки на A, который вызывает ssh на C
источник
-t
к внешним параметрам ssh, если вы хотите интерактивную оболочку, так какssh
предполагается,-T
что ей дана команда.Для интерактивной оболочки вы можете использовать эту простую команду:
Опции -J для прыжка .
источник
Если ваш работодатель предоставляет VPN, я бы рекомендовал использовать его вместо этого.
Таким образом, вам не придется специально настраивать какие-либо приложения (даже ssh), и вы сможете увидеть любую машину за брандмауэром. Кроме того, весь ваш трафик будет зашифрован программным обеспечением VPN, что повысит безопасность любого непреднамеренно или намеренно незашифрованного трафика.
источник
Ясс Еще одно простое решение
-f
параметр указывает SSH переходить в фоновый режим после установления соединенияsleep 10
необходима для поддержания соединения до тех пор, пока вторая команда ssh не использует перенаправленный порт. Тогда первый ssh закроется, когда второй ssh покинет перенаправленный порт.Теперь вы можете запустить последующие сеансы SSH:
Вариант:
последующие сеансы ssh могут быть открыты с помощью команды:
Основное преимущество использования параметров -M и -S состоит в том, что между HostA и HostC открыто только одно соединение, последующий сеанс не будет проходить проверку подлинности и будет выполняться намного быстрее.
источник
Особый случай, смешанные платформы NIX:
hostA (linux) -> HostB (solaris) -> HostC (linux)
Если вам нужно приложение X на hostC, а промежуточный переход - на коробке Solaris ... в этом случае я нашел netcat (nc), необходимый для ProxyCommand, примерно так:
hostA: ~ $ vi .ssh / config:
Затем работает автоматическое туннелирование:
hostA: ~ $ ssh hostC
источник