Изменить каталог по умолчанию, когда я 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:~$ _

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_*трюк
— Ориент
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.