Обойти двухфакторную аутентификацию SSH с мастер-соединением и переадресацией портов?

8

Проблема 1.0

Я работаю на сервере, который поддерживает только двухфакторную аутентификацию (аутентификация ключевой пары отключена). Поэтому каждый раз, когда мой SFTP-клиент хочет загрузить файл, он запрашивает у меня токен ... через 3 минуты, который становится UX not_very_nice.

Решение 1.0

Итак, я узнал о мультиплексировании SSH, и теперь я могу открыть одно мастер-соединение вручную (из терминала), а все остальные ssh-соединения могут быть мультиплексированы сверху, например, так:

$ ssh example_com_master
Verification code: (/me enters the token code)
Password: (/me enters my pass)
Welcome to Ubuntu 14.04 blah blah....
Last login: Wed Oct  1 11:24:15 2014 from 12.34.56.78
$

Затем из другого терминала или другого программного обеспечения:

$ ssh my.example.com
Last login: Wed Oct  1 16:34:45 2014 from 12.34.56.78
$ 

Итак, миссия выполнена, больше не нужно вводить токен 2FA. И нет пароля, в этом отношении, SSH FTW!

~ / .Ssh / конфигурации:

Host example_com_master
  HostName my.example.com
  User username
  PubkeyAuthentication no
  ControlMaster yes
  ControlPath ~/.ssh/sockets/example_com
  ControlPersist 10

Host my.example.com
  HostName my.example.com
  User username
  PubkeyAuthentication no
  ControlMaster no
  ControlPath ~/.ssh/sockets/example_com

Задача 2.0 (TLDR)

Некоторое программное обеспечение (например, PyCharm IDE) использует свою собственную библиотеку SSH / двоичную / что угодно! Это означает, что ничего, что я ввожу, не ~/.ssh/configповлияет на это, AFAIK.

Это моя текущая проблема: есть ли способ «обмануть» такое программное обеспечение, используя уже существующее мастер-соединение?


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

редактировать:

Основная цель - подключиться к удаленному интерпретатору / отладчику Python.

редактировать 2:

Все порты закрыты, кроме 22 и 80. Однако можно сделать:

remote$ ssh localhost:2222
(password or securekey login, both work)
remote$ 

но 2222 открыт только для соединений с локального хоста, и администраторы не открывают никаких дополнительных портов, говоря, что «любой может использовать это».

frnhr
источник
Возможно, я неправильно понимаю вашу проблему, но разве вы не можете обойти ее с помощью локального ssh-монтирования? Это превратит ваше действие sftp в локальную копию, а ssh будет обрабатываться процессом монтирования, которым вы можете управлять.
Белрог
Я должен был упомянуть об этом в вопросе ... Мне нужен SSH для запуска удаленного интерпретатора / отладчика Python. У меня на самом деле есть sshfs для синхронизации файлов :)
frnhr
Я предполагаю, что вы работаете над некоторыми очень специфическими частями оборудования удаленно? Удаленное развитие действительно больно. Лучше было бы использовать локальную виртуальную машину, если вы можете заставить ее работать.
Белрог
Истинная дата! Но в этом конкретном проекте есть несколько сложностей с настройкой локальной среды, которые не могут быть легко решены :(
frnhr
@Belrog Я преобразовал ваш ответ в комментарий. Пожалуйста, оставляйте ответ только в том случае, если он действительно отвечает на вопрос. Чтобы попросить разъяснений, оставьте комментарий. Вот для чего они.
Terdon

Ответы:

2

У вас довольно интересная проблема.

Реальным решением было бы сначала обратиться за помощью к сисадмину.

Если это не вариант, следующая лучшая вещь - это использовать библиотеку pyCharm libssh или что-то еще, что она использует (я немного погуглил и не могу понять), проанализировать ваш ~ ~ / .ssh / config '.

Если это не возможно, вы могли бы быть в состоянии запустить свой собственный демон SSH на удаленном прослушивания хоста на адрес замыкания на себя и подключиться к нему с местным вперед.

Чтобы настроить непривилегированный демон ssh (скопированный по ссылке в ответе SF ):

  $ pwd
  /home/<USER>
  $ mkdir -p etc var/run
  $ cp /etc/sshd_config etc
  $ vi etc/sshd_config
  [Set `Port 2230']
  [Set `HostKey /home/<USER>/etc/ssh_host_rsa_key']
  [Set `UsePrivilegeSeparation no']
  [Set `PidFile /home/<USER>/var/run/sshd.pid']
  [:wq!]
  $ ssh-keygen -t rsa -f /home/<USER>/etc/ssh_host_rsa_key -N ''
  Generating public/private rsa key pair.
  Your identification has been saved in /home/<USER>/etc/ssh_host_rsa_key.
  Your public key has been saved in /home/<USER>/etc/ssh_host_rsa_key.pub.
  The key fingerprint is:
  02:5d:02:5d:e8:2e:c6:b9:4c:d9:93:6c:13:ef:5d:61 hein@vmbert2k8
  $ /usr/sbin/sshd -f /home/<USER>/etc/sshd_config -D

Теперь перенаправьте на него локальный порт (здесь вы будете входить с 2fa):

 ssh -L 2230:localhost:2230 example_com_master

И прямой pyCharm для localhost:2230. Вы также можете настроить авторизацию пары ключей на свой пользовательский sshd.

Обратите внимание, что это длинный выстрел, и ваш системный администратор может не оценить его.

Существует большая вероятность, что pyCharm уже использует OpenSSH для реализации ssh. Если это так, то добавление поддержки мультиплексирования в pyCharm будет намного проще, чем предложенный мной обходной путь.

ВНП
источник
Спасибо за ответ. Администраторы, вероятно, не позволят мне запускать свой собственный sshd (я сомневаюсь, что есть даже доступный порт). Но если бы я мог запустить отдельный sshd на сервере, то я думаю, что мне не нужно ничего мультиплексировать, просто сконфигурируйте сервер для аутентификации пары ключей. Или есть какие-то преимущества, которые я упустил?
августа
Вы правы в том, что вам вообще не нужно мультиплексирование :). Кроме того, я знаю, что я бы разозлился, если бы пользователь сделал что-то подобное, не спросив меня сначала. Также, если вы все равно спросите системного администратора, более разумным решением будет не требовать 2fa от localhost. Это то, что я обычно делаю в любом случае.
GnP
:) А если бы не было 2fa от localhost, может ли туннелирование решить проблему?
frnhr
Точно, если вам не требуется 2fa от localhost, подключение через туннель похоже на локальное подключение. За волшебством sshd_config для него, Match Address 127.0.0.1 PasswordAuthentication yes вероятно, следует отдельный Matchв отдельной строке, чтобы закрыть раздел, если вы не добавляете это в конец файла.
GnP