Я пытаюсь использовать ноутбук Jupyter на удаленном компьютере. Настройка выглядит следующим образом: у меня есть домашний ноутбук, который может подключаться по ssh к определенному компьютеру в сети моего университета (например, gateway.myuniv.edu
). После входа в gateway.myuniv.edu
я могу подключиться по ssh к компьютеру, на котором я хочу запустить сервер записной книжки Jupyter (например, cluster.myuniv.edu
).
Что работает: я могу запустить сервер на шлюзе и подключиться к нему со своего портативного компьютера, используя локальную переадресацию портов, как показано ниже:
On gateway.myuniv.edu
: $ jupyter notebook --no-browser --port 8888
На моем ноутбуке: $ ssh -v -N -L 9000:localhost:8888 [email protected]
Затем в браузере ноутбука я открываю URL: https://localhost:9000
Что не работает: я не хочу запускать сервер на шлюзе, так как я не могу выполнять там тяжелые вычисления. Я пытался сделать следующее:
On cluster.myuniv.edu
: $ jupyter notebook --no-browser --port 8888
На моем ноутбуке: $ ssh -v -N -L 9000:cluster.myuniv.edu:8888 [email protected]
Затем в браузере ноутбука я открываю URL: https://localhost:9000
. Это не работает: SSH сообщает, что в соединении отказано.
Я не понимаю, почему это могло произойти и как это отладить, буду рад любой помощи. Спасибо!
Проблема в том, что вы перенаправляете порт
:8888
наcluster.myuniv.edu
на порт:9000
наgateway.myuniv.edu
, а затем перенаправляете порт:8888
наgateway.myuniv.edu
на порт9000
на вашем портативном компьютере.Решение было бы следующим:
На cluster.myuniv.edu:
$ jupyter notebook --no-browser --port 8888
На gateway.myuniv.edu:
$ ssh -v -N -L 8888:localhost:8888 [email;protected]
На ноутбуке:
$ ssh -v -N -L 9000:localhost:8888 [email;protected]
Я также рекомендовал бы вам запустить ноутбук Jupyter (в кластере) и туннелирование ssh (на шлюзе) с помощью Tmux или Screen, чтобы он оставался активным, даже если вы закроете терминал.
Это почти работает: команда на шлюзе должна ssh для кластера:
$ ssh -v -N -L 8888:localhost:8888 [email;protected]
. Когда я так делаю, это работает. Отредактировал ваш ответ — спасибо! — person R S; 07.08.2016Благодарность! Я рад, что у тебя все получилось. Не могли бы вы отметить вопрос как отвеченный? — person R S; 07.08.2016
Конечно. И последнее, не могли бы вы объяснить, почему
ssh -v -N -L 9000:cluster.myuniv.edu:8888 [email;protected]
приводит к тому, что я перенаправляю порт:8888
наcluster.myuniv.edu
на порт:9000
наgateway.myuniv.edu
, а затем перенаправляю порт:8888
наgateway.myuniv.edu
на порт9000
на моем ноутбуке? Для меня это не имеет смысла. — person R S; 07.08.2016Надеюсь, это объяснение поможет: так что в основном вы запускаете ipython notebook на
:8888
в кластере. Для подключения к кластеру необходимо подключиться через шлюз. Это означает, что вы подключаетесь: Портативный компьютер — ›Шлюз -› Кластер. Теперь он включен:8888
в кластере, поэтому вы выбираете порт на шлюзе для туннелирования к:8888
в кластере. Выбираем и:8888
(можете выбрать все, что захотите). Теперь, наконец, мы туннелируем к шлюзу и пересылаем:8888
на:9000
на нашем ноутбуке. — person R S; 08.08.2016Это также должно работать: В кластере:
$ jupyter notebook --no-browser --port 8888
На шлюзе:$ ssh -v -N -L 8001:localhost:8888
На портативном компьютере:$ ssh -v -N -L 9000:localhost:8001 [email;protected]
— person R S; 08.08.2016Спасибо. Это подробно объясняет, почему ваше решение работает, что я понимаю, но не почему мое исходное однострочное решение терпит неудачу, чего я не понимаю. — person R S; 08.08.2016
Извините, я неправильно понял ваш вопрос. Я не уверен, почему один лайнер не работает. Возможно, стоит задать новый вопрос о stackoverflow. — person R S; 09.08.2016