Изменить каталог по умолчанию, когда я SSH на сервер

43

Мне было интересно, есть ли способ изменить каталог по умолчанию, который я помещаю после SSH на мой сервер Ubuntu.

99% времени, когда я захожу на свой сервер, это доступ к файлам в определенном каталоге:

/var/www/websites

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

Боб Флемминг
источник

Ответы:

63

Есть два способа добиться этого:

  • Измените домашний каталог на сервере на / var / www / website (это не очень хорошая идея)
  • добавь cd /var/www/websitesв конец свой .bashrc. Я использую это на наших puppetmasters, так как я всегда хочу быть в / etc / puppet / environment / dkaarsemaker вместо моего homedir :-)
Деннис Каарсемакер
источник
Спасибо. Я отредактировал файл bash.bashrc, который находился в каталоге / etc. Получил удовольствие :)
Боб Флемминг
7
Ох, я бы этого не делал, так как это затрагивает всех пользователей. Лучше отредактировать /home/yourlogin/.bashrc
Деннис Каарсемакер
6
Возможно, вы захотите поставить это .profileвместо .bashrc, но это зависит от вашего варианта использования. .profileвыполняется только для интерактивных входов в систему (например, shell), но .bashrcтакже выполняется для неинтерактивных входов в систему (например, scp, rsync и т. д.). Кроме того, .profile чаще вызывается оболочками, которые не являются bash (например, zsh).
phord
.bashrc запускается, когда вы выполняете "exec bash", чтобы обновить ваш bash. Изменение bashrc для специального случая использования (здесь ssh login) бесполезно.
user3123159
14

Если вы используете ключи для входа по SSH, вы можете изменить путь, command=предварительно указав ключ ~/.ssh/authorized_keysна удаленном сервере. Пример:

command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key

Можно генерировать и использовать несколько ключей для одного и того же пользователя. Один ключ на сервере может содержать команду, а другой - нет - таким образом, вы выбираете ожидаемое поведение во время входа в систему. Вы можете просто обернуть это с местным ~/.ssh/config :

Host websites-my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key1>  #on the server key with "command"
    User webmaster

Host my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key2>  #on the server key without command
    User webmaster

Вот что произойдет:

local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _

или:

local$ ssh my-host
webmaster@realhostname:~$ _
gertas
источник
3
Я предпочитаю этот вопрос выше принятого. Это позволяет нескольким пользователям использовать одного и того же пользователя на сервере и при этом иметь возможность настраивать то, что происходит, когда вы входите в систему лично. Гораздо более гибкий и корректный, чем другой.
testuser
1
Здесь вы должны быть очень осторожны, поскольку добавление команд в ~ / .ssh / authorized_keys влияет на другие инструменты, основанные на ssh, такие как rsync, scp. Эти команды будут просто зависать
warunapww
1
Вы можете использовать $SSH_ORIGINAL_COMMANDвместо того, /bin/bash -lчтобы заставить инструменты работать (в моем случае, hg). Или, $SHELLесли вы не хотите использовать жесткий код для bash. Не уверен, как заставить работать инструменты и логины людей.
mpen
Просто предостережение: если вы отключили аутентификацию PasswordAuthentication (см. Askubuntu.com/questions/346857/… ) и случайно набрали неверную командную строку, вы можете заблокировать себя вне системы.
karan.dodia
6

Openssh sshd по умолчанию принимает эти переменные окружения от клиента:

AcceptEnv LANG LC_*

Вы можете использовать это для отправки значения из локальной среды клиента на сервер следующим образом:

LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server

Вы можете поместить директиву SendEnv в ~ / .ssh / config, чтобы вам не приходилось включать ее в командную строку.

Если вы поместите в свой ~ / .profile следующее (для воздействия только на интерактивные входы в систему используйте .profile, для влияния на все входы в систему используйте .bashrc):

if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
  cd "$LC_CDPATH";
fi

Затем он автоматически изменит каталог на каталог, указанный в переменной среды при входе в систему, если он указан и является ли он каталогом.

Виктор Джерлин
источник
1
+1 за LC_*трюк
Ориент