Я пытаюсь создать настройку, в которой можно было бы использовать ssh для определенного порта на localhost, а затем получить отправлено на удаленный сервер и в оболочку без необходимости вводить учетные данные (нет, секретный ключ, к сожалению, не вариант).
Пока что я настроил мультиплексирование ssh с ControlMaster
, поэтому я могу запустить удаленную оболочку ssh без каких-либо запросов из локальной оболочки.
Есть ли способ использовать этот сокет, когда новый клиент подключается к определенному порту на localhost?
Я пробовал разные комбинации с -D
, -R
и -S
, безуспешно. Возможна ли такая установка на Linux или Mac?
редактировать:
Я не против ввода учетных данных localhost в любой момент, но я стараюсь избегать ввода удаленных учетных данных для всех подключений, следующих за начальным управляющим соединением.
localhost ----> localhost:2222 ----> remote:22
$ ssh -p 2222 forward to remote $ _ :)
using an existing
control socket
Вы всегда можете перенаправить (вперед) localhost:2222
localhost:22
используя iptables, например.
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-port 22
Видеть псевдоним порт / перенаправление порта на другой локальный порт или это поиск Гугл. Это, помимо ControlMaster auto
, не должны требовать дополнительных паролей (локальных или удаленных).
Однако мне это кажется ненужным и заставляет задуматься, нет ли у вас проблемы XY.
Если вам нужна базовая оболочка, вы можете использовать netcat
для создания оболочки, прослушивающей определенный порт на удаленном сервере, и использования перенаправления портов на локальном ssh для создания туннелей:
На пульте:
while true ; do netcat -l -p 15000 -e /bin/bash ; done
На местном:
ssh -L 5000:remoteip:15000 user@server
netcat localhost 5000
Вы не сможете использовать некоторые команды (поведение vim веселая), но он работает для большинства команд. Каждый раз, когда соединение закрывается, цикл порождает новый.