Изменение .profile для правил SSH

Изменение .profile для правил SSH

Я хочу создать следующий скрипт в .profile, чтобы каждый сеанс SSH сразу переходил на свое место:

  1. Проверьте указанный хост (пользователь@хост).
  2. Если хост = хост1 -- cd /var/www/site1

и т. д.

Помощь! :)

решение1

Я почти уверен, что SSH не отправляет имя хоста на сервер (он просто использует его локально для поиска IP-адреса и проверки ключей и т. д.). По крайней мере, не таким образом, чтобы это можно было использовать в скрипте оболочки.

Посмотрите на вывод env— единственное имя хоста является каноническим, независимо от того, какое имя использовалось в команде ssh.

Некоторые клиенты SSH и некоторые серверы SSH позволяют клиенту указать значение для одной или нескольких переменных среды, возможно, вы могли бы использовать это, чтобы сообщить серверу, в какой каталог переключиться. Например, см. Puttyконфигурация, подключение, данныеили OpenSSHОтправитьEnvвариант.

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

решение2

Ваш вопрос неясен: вы достигаете одного и того же хоста через несколько псевдонимов? Вы достигаете разных хостов, которые разделяют .profile? Вы пытаетесь выполнить команды на основе имени исходного хоста или на именах целевых хостов?

Если вы хотите получить разные эффекты на разных удаленных хостах, просто проверьте имя удаленного хоста:

case "$(hostname)" in
  host1) cd /var/www/site1;;
esac

Если вы хотите получить разные эффекты на одном и том же хосте, вы можете использовать SendEnvдирективы в вашем~/.ssh/configдля отправки переменных окружения (при условии, что вы используетеOpenSSHклиент). Их необходимо включить с помощьюAcceptEnvдиректива на стороне сервера, что часто не так. Однако LC_*переменные обычно разрешены, поэтому вы можете передавать информацию с их помощью. На стороне клиента запустите LC_VIRTUAL_HOST=site1 ssh common-host.provider.com. В вашем .profileна сервере напишите

case "$LC_VIRTUAL_HOST" in
  host1) cd /var/www/site1;;
esac

Связанный контент