Туннель соединение SSH через промежуточную машину в единственной команде

Поскольку запуск взглянул на это.

Для завершения работы создайте ссылку / копируют Ваш сценарий в одну из/etc/rcX.d папок, где X runlevel, в котором Вы хотите, чтобы это выполнилось. 0 завершение работы runlevel для Debian, которому я верю.

9
задан 25 August 2009 в 16:13
4 ответа

Я понял, что Вы хотите только войти в систему компьютера C, не действительно туннелировать что-либо от до C. Так, это должно добиться цели:

ssh -t computer-b "ssh computer-c"

Вам, возможно, придется ввести пароли дважды, сначала для компьютера B и затем для компьютера C, но этого можно избежать при помощи аутентификации пары ключей ssh.

8
ответ дан 2 December 2019 в 22:34
  • 1
    Спасибо - это работает! Если я могу быть так - полужирный для выяснения у продолжения. Какие-либо идеи, как я могу scp файл от до C в единственной команде? –  sanity 25 August 2009 в 16:35
  • 2
    That' s немного хитрый. Это могло быть сделано путем добавления tar к соединению, но если it' s только один файл и компьютер B имеет дисковое пространство для содержания его некоторое время, it' s намного легче скопировать его на двух шагах. –  af. 25 August 2009 в 16:40

При использовании ssh ключей Вы могли бы генерировать новый ключ для машины B и использования это к соединению от до B. На машине B, можно добавить

command="ssh C" ssh-....

в ~/.ssh/authorized_keys файл. Это означает, что каждый раз, когда Вы подключаете к B с этим ssh ключ, он выполнится ssh C команда.

Я не знаю, работает ли это с scp.

0
ответ дан 2 December 2019 в 22:34

Вы, вероятно, хотите использовать ProxyCommand SSH: http://benno.id.au/blog/2006/06/08/ssh_proxy_command

0
ответ дан 2 December 2019 в 22:34
  • 1
    Я can' t находят способ сделать эту работу потому что я don' t имеют пароль для компьютера C, и этот подход, кажется, требует его. Открытый для предложений, хотя, поскольку этот подход действительно кажется более изящным. –  sanity 25 August 2009 в 17:05

Используйте ProxyCommand

См. man ssh_config . Я рекомендую использовать ProxyCommand . Возьмем ваш исходный сценарий:

  • Компьютер A (ваш компьютер)
  • Компьютер B (имя хоста прокси)
  • Компьютер C (доступен только через SSH с компьютера B)

Изменить ~ / .ssh / config со следующим содержимым.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Теперь вы сможете прозрачно подключиться к компьютеру C. Например,

ssh computerc

Преимущества этого метода

Более безопасный

Вам нужен только ваш закрытый ключ. Компьютер А (ваш компьютер). Команда nc будет действовать как прокси, в котором SSH будет шифровать проходящий трафик. Это включает аутентификацию. Распространять ваш закрытый ключ на несколько серверов - очень плохая идея (поскольку любой скомпрометированный сервер с вашим закрытым ключом в конечном итоге скомпрометирует ваш закрытый ключ).

Соответствует нескольким адресатам

Можно сопоставить несколько конечных компьютеров, используя Хост . Отдельный компьютер или любой компьютер в определенной сети (например, 192.168.35.0/24 в приведенном выше примере) для прокси через компьютер Б. Он также служит псевдонимом.

ssh 192.168.35.27

В приведенном выше примере это будет прокси-сервером через компьютер B для получения IP-адреса.

Прокси-серверы в гирляндном соединении

Используя этот метод, вы можете последовательно подключить столько автоматических прокси-серверов, сколько необходимо. например вы можете добавить компьютер D , который доступен только с компьютера C., и он будет работать прозрачно.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerd будет автоматически прокси через компьютер C и компьютер B в приведенном выше ssh_config примеры.

0
ответ дан 2 December 2019 в 22:34

Теги

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