Я постоянно подключаюсь к нескольким машинам из разных физических мест (и, следовательно, из разных физических машин). Большая часть этого делается, хотя ssh, иногда требуется один или два шлюза (которые я вызываю через ProxyCommand
in ~/.ssh/config
). Я хотел бы знать, есть ли метод для определения IP или имени хоста машины, которая вызывает начальное соединение (т.е. машины, на которой я работаю) на удаленном конце?
- Я не хочу отправлять переменные окружения, так как на некоторых машинах мне не нужно устанавливать root
PermitUserEnvironment
. $SSH_CLIENT
Переменная среды используется для прямых соединений, но только перечислены самые последние ворота.
Моя текущая идея для решения заключается в том $SSH_CLIENT
, чтобы получить ssh, найти значение этой машины $SSH_CLIENT
и повторять до тех пор, пока она не существует; затем захватите имя хоста и вытяните его как-нибудь.
Похоже на хакерскую работу; у кого-нибудь есть лучший метод?
В основном я работаю в оболочке bash, но я также рад любым предложениям, которые тоже не используются.
источник
Ответы:
Я никогда не пробовал, но могу придумать что-то, что может сработать: вы не позволяете SSH запускать вашу оболочку входа в систему, а берете дело в свои руки. Вы можете сказать SSH запускать произвольные команды. Вместо
вы бы запустить что-то вроде
То, что это делает, это дает SSH что-то еще делать вместо запуска оболочки входа в систему. Это нечто является строкой, которая будет запускаться как команда, удаленно. Мы используем это для запуска оболочки особым образом: мы присваиваем ей переменную окружения
DAT_ORIGIN_HOST
, которая содержит наш ip на eth0 (возможно, вам придется изменить это).Уловка, которую мы выполняем, состоит в том, что мы помещаем команду для удаленного выполнения в двойные кавычки
"
. Двойные кавычки (по крайней мере, в Bash) означают, что перед тем, как строка передана в SSH, наша оболочка сканирует ее и при необходимости выполняет расширения / замены. Это означает, что наша оболочка вычислит часть `$ (ifconfig ...) по нашему текущему IP-адресу и передаст ssh строку, содержащую определение переменной среды с нашим локальным IP-адресом.После того, как вы вошли на удаленный компьютер,
echo $DAT_ORIGIN_HOST
должен распечатать ваш IP-адрес.Для разработки этого вызова в SSH я беззастенчиво взял отсюда для извлечения IP-адреса и здесь для -t и как запустить что-то интерактивное
Отказ от ответственности: я не уверен , о
-l
и-i
возможность/bin/bash
. Может быть, вам нужно их опустить.источник
Я правильно понял, что вы подключаетесь напрямую от исходного компьютера к месту назначения с помощью
proxycommand
прыжков. Итак, вот три хака для вас (третий добавлен после комментария к сценарию использования). Во-первых) Используйте удаленную переадресацию портов, чтобы вы могли вернуться к исходной машине с-R remotemachineport:dstonlocalnet:dstportonlocalnet
Второе) Жестокое обращение
AcceptEnv LC_*
с целью. Это нехорошо, но достаточно часто разрешать переменные LOCALE даже тогда, когда AcceptUserEnviconment недоступен. Итак, теперь вы можете сделать:В-третьих) Используйте ssh remote forward для определения типа хоста или хоста.
Теперь соединитесь с переадресацией портов:
источник
AcceptEnv LC_*
это вообще допускается, но не является стандартом, путем установки по умолчанию?AcceptEnv
директиве/etc/ssh/sshd_config
. Не забудьте перезапустить,sshd
если этот файл изменился.Вы можете набрать
who -m
на удаленном конце, чтобы получить информацию о текущем вошедшем в систему пользователе (включая имя хоста).who
выдает информацию о зарегистрированных пользователях, а-m
переключатель показывает «только имя хоста и пользователя, связанные с stdin».источник
ты пробовал следующее?
источник