3

Я делю сервер / среду разработки с несколькими другими инженерами, и мы все совместно используем учетную запись пользователя на этом сервере.

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

if [ "$SSH_CLIENT_USER" = "<me>" ]; then
    # do my config
fi

Существуют ли такие переменные окружения, установленные ssh, которые могут быть использованы для уникальной идентификации меня? Или любой другой способ дифференциации клиентских машин? Может быть, какую-нибудь конфигурацию ssh я мог бы сделать с моим ноутбуком, чтобы он идентифицировал себя? У меня нет прав администратора на сервер (и я бы не хотел их использовать), но, конечно, я готов вносить любые изменения в конфигурацию моего ноутбука.

3 ответа3

2

У Jakuje было много хороших идей, которые, к сожалению, не работали по разным причинам, но предложение о переадресации агентов дало мне идею, которая работает.

ssh-add -l перечисляет доступные агенты, и, поскольку мой ключ хранится в домашнем каталоге моего ноутбука, который содержит мой уникальный идентификатор работы, я смог использовать это:

if [[ $(ssh-add -l 2> /dev/null) == *"<my-id>"* ]]; then
    # do my config
fi

(В паре с ForwardAgent yes в моем локальном файле ~/.ssh/config)

1

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

Если вы всегда подключаетесь с одного и того же IP-адреса (или с конечного набора), вы можете использовать

SSH_CONNECTION

Определяет клиент и сервер конца соединения. Переменная содержит четыре разделенных пробелами значения: IP-адрес клиента, номер порта клиента, IP-адрес сервера и номер порта сервера.

Вы можете определить свои переменные

Я надеюсь, что вы используете ssh ключи для аутентификации. Если вы , возможно , префикс ключа с модификатором в authorized_keys файл, чтобы определить другую переменную окружения, такие как:

environment="WHOIAM=my-mane" ssh-rsa AAAAB3Nza...LiPk== user@example.net

и затем вы можете проверить эту переменную в ~/.bashrc . Как описано на странице руководства для sshd

Вы можете передать переменные от клиента

Если у вас будет доступ к конфигурации сервера, вы можете настроить как клиент, так и сервер для отправки и принятия некоторой переменной среды по вашему выбору (параметры SendEnv и AcceptEnv ).

Вы можете обнаружить специальную конфигурацию

Другие идеи могут состоять в том, чтобы использовать пересылку ssh-agent (если вы знаете, что коллеги не используют его) и проверить переменную $SSH_AUTH_SOCK .

1

Если вы не возражаете возиться с локальной командой SSH (которую вы запускаете на своей машине для подключения к серверу), вы можете выполнить ее так:

ssh user@remote -t 'export SPECIAL_ID=magic; bash -l'

(Очевидно, вы хотите поместить это в сценарий или псевдоним оболочки).

Это запустит новую оболочку, очень похоже на то, что вы обычно делаете, но сначала установите переменную окружения, которую вы можете затем проверить в .bashrc и у друзей.

Другим способом достижения того же эффекта является установка параметра SendEnv в вашем файле .ssh/config , но для этого также потребуется возможность установить соответствующий параметр AcceptEnv в /etc/ssh/sshd_config сервера, который может не Это возможно, если у вас нет прав администратора на сервере, поэтому приведенное выше решение обеспечит тот же эффект, не требуя прав администратора на сервере.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .