
Я хочу создать следующий скрипт в .profile, чтобы каждый сеанс SSH сразу переходил на свое место:
- Проверьте указанный хост (пользователь@хост).
- Если хост = хост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