Emacs Tramp SSH двойной прыжок - PullRequest
5 голосов
/ 01 мая 2011

Может кто-нибудь помочь мне настроить Emacs Tramp для двойного прыжка?Я хочу работать на machine2.abc.def.edu, к которому я могу подключиться только через machine1.abc.def.edu.Мое имя пользователя - мое имя, на обеих машинах одинаковое.

Я пытался добавить .emacs:

(add-to-list 'tramp-default-proxies-alist
          '("\\`machine2\\.abc\\.def\\.edu\\'"
            "\\`myname\\'"
            "/ssh:machine1\\.abc\\.def\\.edu:"))

Это мое лучшее предположение о том, что в руководстве.Затем я делаю: Cx Cf /ssh:machine2.abc.def.edu или: Cx Cf /ssh:rsuhada@machine2.abc.def.edu

Но оба дают:

ssh: Could not resolve hostname ssh: nodename nor servname provided, or not known
Process *tramp/scpc ssh* exited abnormally with code 255

И мои Аквамаки не могут быть уничтожены и должны быть убиты из скорлупы ... Здесь есть двухлетняя ветка с тем же вопросом.Я попробовал ответ оттуда:

(add-to-list 'tramp-default-proxies-alist
          '("machine2.abc.def.edu"
            nil
            "/ssh:myname@machine1.abc.def.edu:"))

С такими же результатами ... также для всех комбинаций, которые я мог придумать ... Удаленное редактирование на machine1.abc.def.edu работает отлично, хотя.

Ответы [ 3 ]

10 голосов
/ 01 мая 2011

Ответьте, чтобы использовать команду ssh_proxy , доступную в ssh_config.Документировано здесь и здесь .По сути, вы создаете файл конфигурации в своей папке ssh, в который вы можете записывать ярлыки. Один из ваших ярлыков - использовать прокси через другую конечную точку.Все ваши ярлыки работают для любого инструмента, использующего ssh, включая git и emacs.

Host endpoint2
     User myusername
     HostName mysite.com
     Port 3000
     ProxyCommand ssh endpoint1 nc -w300 %h %p

Host endpoint1
     User somename
     HostName otherdomainorip.com
     Port 6893

В этом примере при запуске ssh endpoint2 автоматически будет проходить конечная точка1.

4 голосов
/ 01 мая 2011

Хорошо, давайте попробуем что-то другое, не открывая туннель.Как насчет следующего в вашем файле .emacs:

(add-to-list 'tramp-default-proxies-alist 
             '("\\`machine2\\'" 
               nil 
               "/ssh:%u@machine1.abc.def.edu:"))

Это отличается от кода, который вы нашли в сообщении на форуме в двух пунктах:

  1. это добавляет галочки вокруг целиимя хоста (синтаксис Emacs regexp, чтобы избежать совпадения частичных имен)
  2. он использует только имя субдомена на целевом хосте (вы сообщили в комментарии ниже, что вы не можете использовать ssh для machine2 при использовании полного имени домена)

Помогает ли это при попытке доступа к файлу на компьютере2?

2 голосов
/ 01 мая 2011

Настройка туннеля ssh от машины1 к машине2 (при условии, что sshd работает на порту 22 на машине2):

machine1.abc.def.edu> ssh -f -N -L 2222:localhost:22 machine2.abc.def.edu

Затем либо подключитесь к machine2 из Emacs следующим образом:

/ssh:machine1.abc.def.edu#2222

или добавьте следующую строку в ваш .emacs:

(add-to-list 'tramp-default-proxies-alist
             '("\\`machine2\\.abc\\.def\\.edu\\'" nil
               "/tunnel:machine1.abc.def.edu#2222:"))
...