Перейти к содержимому

Linux: Как автоматически запускать команды при входе в SSH?

10

Всякий раз, когда я захожу на свой сервер Linux, мне бы хотелось, чтобы несколько команд запускались автоматически (установить некоторые переменные, изменить местоположение и т. Д.)

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

Как я могу настроить это сделать это?

41 915 просмотров
Alasdair спросил 14 лет назад
A 290

4 ответа

23
Принятый ответ

Вставьте команды ~/.bashrc. Все, что там происходит, выполняется каждый раз, когда вы входите в систему.

Если вам нужно, чтобы команды выполнялись только при входе через ssh (но не при физическом входе в систему), вы, вероятно, можете проверить наличие SSH_CONNECTIONпеременной среды и запускать команды только в том случае, если вы обнаружите, что она существует.

Я не вхожу в систему как root, это сервер AWS, поэтому я должен войти в систему как "ec2-user", а затем перейти в root с помощью "sudo su -". Так я должен поместить команды в "/home/ec2-user/.bashrc"?

· 14 лет назад · 0

Это предполагает, что ~ / .bashrc получен из вашего ~ / .bash_profile. ~ / .bash_profile будет сценарий, который вызывается для оболочки входа, такой как ssh. Я верю, что ~ / .bashrc будет вызван, если вы откроете, например, терминал Gnome, ПОСЛЕ того, как вы уже вошли в систему.

dgrant · 14 лет назад · 5

Вы меня смутили, позвольте мне объяснить подробнее: это экземпляр Amazon Web Services, который фактически является сервером, поэтому никто никогда не будет физически входить в систему (я даже не уверен, существует ли он физически как одна машина). Я вхожу, используя PUTTY с именем пользователя ec2-user. Это сбрасывает меня в каталог / home / ec2-user. Затем я переключаюсь на пользователя root, набирая «sudo su -», который затем переводит меня в «/ root», затем я должен набрать серию команд, в том числе изменить меня обратно на «/ home / ec2-user» и установить некоторые переменные, псевдонимы и т. д. Итак ... как мне заставить это сделать?

· 14 лет назад · 0

Кроме того, поскольку я меняю пользователя, я ожидаю, что в профиле bash пользователя ec2 я должен указать только «sudo su -», а затем остальные команды в корневом файле bash?

· 14 лет назад · 0

ПРИМЕЧАНИЕ: на самом деле, .profile вызывается, если он существует, если только .bash_profile не существует, а затем вызывается.

dgrant · 14 лет назад · 0

Прежде всего, я бы рекомендовал ставить «sudo» перед командами, которые в ней нуждаются, а не переключаться на root.

dgrant · 14 лет назад · 0
dgrant · 14 лет назад · 0

Когда вы запускаете «su -», он предоставляет «оболочку входа» в оболочку, как если бы root входил напрямую. Я предполагаю, что это означает, что он запустит сценарии .profile / .bash_profile / .bashrc для root и удалит все, что было установлено в пользовательском .profile / .bash_profile / .bashrc. Я раньше не использовал «su -», но люди часто используют его, и это то, что подразумевает справочная страница.

dgrant · 14 лет назад · 0

Стоит отметить, что вы также можете поместить команды в / etc / profile, чтобы запустить их для любого пользователя.

Time Sheep · 13 лет назад · 0
David Z ответил 14 лет назад
D 4 907
7

Просто поместите это в ~ / .bashrc или /etc/bash.bashrc, если вы хотите это для всех пользователей:

if [[ -n $SSH_CONNECTION ]] ; then echo "I'm logged in remotely" fi 

и как я могу потерять сеанс после закрытия выполнения?

e-info128 · 11 лет назад · 0

@WHK Что вы имеете в виду, проиграв сессию?

Llamageddon · 11 лет назад · 1

@Llamageddon: Я думаю, что ему интересно то же самое, что и я. Если бы я хотел поместить весь сеанс SSH в screen, я мог бы использовать ваш ответ и поместить screen вместо echo. Проблема в том, что завершение сеанса экрана вернется к приглашению SSH вместо выхода из системы. Просто написание этого комментария дало мне ответ: добавьте команду logout после команды screen.

zondo · 9 лет назад · 0

Это, однако, не работает для сеанса ssh, который не использует bash, например, когда я открываю сеанс sftp.

Fabio · 9 лет назад · 0

@zondo @ e-info128 exec command заменит текущую оболочку тем, что вы запускаете.

Llamageddon · 9 лет назад · 0
Llamageddon ответил 14 лет назад
L 657
0

В качестве альтернативы, вы можете указать команду для запуска во время вызова ssh:

$ ssh -t server 'cmd; exec bash -l' 

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

Dmitry Grigoryev ответил 9 лет назад
D 5 811
0

На самом деле ~/.ssh/rcэто правильное место для вас, чтобы добавить команду

 ~/.ssh/rc Commands in this file are executed by ssh when the user logs in, just before the user’s shell (or command) is started. See the sshd(8) manual page for more information. 

Не обязательно. Это * * место, где можно разместить команды.

Daniel B · 7 лет назад · 0
brook hong ответил 7 лет назад
B 239