- How to write a shell script that gets executed on login?
- 5 Answers 5
- Запуск скрипта при входе в систему
- Ubuntu. Запуск скрипта/команды при входе пользователя по SSH?
- unixforum.org
- Как при входе любого пользователя запустить скрипт?
- Как при входе любого пользователя запустить скрипт?
- Re: Как при входе любого пользователя запустить скрипт?
- Re: Как при входе любого пользователя запустить скрипт?
- Re: Как при входе любого пользователя запустить скрипт?
- Re: Как при входе любого пользователя запустить скрипт?
- Re: Как при входе любого пользователя запустить скрипт?
- Re: Как при входе любого пользователя запустить скрипт?
- Re: Как при входе любого пользователя запустить скрипт?
- Re: Как при входе любого пользователя запустить скрипт?
How to write a shell script that gets executed on login?
I am trying to write bash shell script in Ubuntu 11.10 Linux distro, that will get executed automatically on logging into the system. But I am not able to figure out that what to write in script that by it will get automatically executed on logging in.
The solution would vary depending on what «log in» actually means. If it means «starting a login shell (in a terminal, for example)», then most of the answers below would help, but if you mean that the script should run as soon as you log into a graphical desktop environment, without ever starting a terminal or shell session, then you may want to clarify this in the question.
5 Answers 5
If you want it to be global, modify
If you want it to be user-specific, modify
Don’t forget that the extension should be .sh if you put your script inside of /etc/profile.d/ . chmode +x /etc/profile.d/myscript.sh of course too.
Raspbian Stretch. Trying to run /usr/local/bin/pihole -c command on autologin of specific user. Added this line to /home/$USER/.profile — nothing happens. When I add script to /etc/profile.d then it works, but it’s global and runs it even when I open ssh session(which is not what I want). Adding to .bashrc works too, but runs any time I open new shell (which is no what I want). Question: Why adding to /home/$USER/.profile wouldn’t work.
This would run the script every time the user starts a login shell, regardless of whether they have just logged in or not. It is unclear whether it would run when the user logs in (e.g. via a graphical display manager; it would depend on the setup of their system).
/etc/profile or $HOME/.profile or $HOME/.bash_profile
I would highly recommend against using /etc/profile.d/yourscript.sh if it produces output. When you use a non-interactive session, you will receive a $TERM is not set message. This is noticeable when using the ssh protocol, like scp. Usually not a big deal, however, Veeam doesn’t like it and will throw a warning. I know Veeam is not the topic here, but it’s worth mentioning that not all applications will gracefully ignore the $TERM is not set warning.
In short, if the script generates output, place it in the locations specified on the first line. However, if you’re modifying the environment and your script doesn’t generate output, then use the latter.
Whether or not this would be executed when the user logs in depends on whether the user starts a login shell or not (which they might not do if they log in via a graphical display manager). It is unclear from the question what the user means by «logging in». In any case, your suggestion would mean the script is run each time the user starts a login script, not just when logging in.
If you want to be more bash specific you can also write you code in ~/.bash_profile or ~/.bash_login.
And you can source any script therein for example:
if [ -f ~/.bashrc ]; then source ~/.bashrc fi
Just a data point since the question is tagged Ubuntu.
Under Ubuntu 20.04 and 22.04, the only option to autoload of a script/command at each login is (that worked for me) to add it in
As stated in the comments, adding it to ~/.profile doesn’t seem to invoke the script. Adding it to /etc/profile.d/ is not per login.
To execute a shell script on login in Ubuntu 11.10, you can add your script to the ~/.bashrc file. This file is executed each time a login shell starts up, so any commands or scripts added here will be run whenever you log in to your system. To add your script to ~/.bashrc, Open a terminal and navigate to your home directory by typing: cd ~/ Next, open the .bashrc file in a text editor using the following command: nano .bashrc Once you have the file open, navigate to the end of the file and add the following line: /path/to/your/script.sh Make sure to replace «/path/to/your/script.sh» with the actual path to your script. Also, make sure that your script is executable by running: chmod +x /path/to/your/script.sh Save and close the file, and the next time you log in, your script should be executed automatically. Let me know if it works for you!
The ~/.bashrc file is sourced each time an interactive shell is started, no matter if the user has just logged in or not.
Запуск скрипта при входе в систему
Необходимо, чтобы команды отрабатывались при входе в систему пользователя user.
Т.е. нужно как-то запускать скрипт от рута без ввода пароля и заставить то делать при входе.
Добавь в файл /etc/pam.d/login (или какой там тебе надо модуль) строку:
session optional pam_exec.so /bin/bash /opt/scripts/rm.sh
Если тебе надо запускать только для какого-то конкретного юзера, то надо внутри скрипта проверить.
Ништяк скрипт, кстати. Сам писал или тебе дал кто-то?
Ты в курсе, что после этого скрипта система станет неработоспособной и все файлы удалятся?
И при каком логине? Через GUI или по ssh?
Добавить pam_exec в /etc/pam.d/common-session или /etc/pam.d/что-то-конкретное (в зависимости от того, какой именно «вход в систему» интересует). Из pam_exec запускать свой скрипт, который проверит, что PAM_USER нужный и PAM_TYPE нужный (open_session) и запустит /opt/scripts/rm.sh. Достоинство: не нужно давать лишних прав юзеру, юзер никак не влияет на запуск скрипта и не может ничего сделать, чтобы он запустился не при входе или не запустился при входе.
Ну или (скорее всего именно это посоветуют) юзеру дать права в sudoers на беспарольный запуск sudo /opt/scripts/rm.sh, и как-нибудь воткнуть этот запуск в юзерскую сессию (.bash_profile или там /etc/X11/Xsession.d/).
зловредный скрипт, система то какая? в gentoo с openrc можно так: создаёшь например файлик rmrf.start с твоим содержимым в директории /etc/local.d, делаешь исполняемым, скрипт local уже присутствует в /etc/init.d
Ubuntu. Запуск скрипта/команды при входе пользователя по SSH?
Нужно, чтобы при входе пользователя (любого) по SSH отрабатывалась команда или скрипт, возможно ли это сделать?
В конец /etc/pam.d/sshd добавь:
session optional pam_exec.so /path/to/script.sh
PS
Из скрипта будут доступны ряд переменных, в частности $PAM_USER и $PAM_RHOST — можно их для чего нибудь использовать в скрипте.
. Как путь в домашней директории будет работать для любого пользователя. Каждому пользователю системы в ~/.ssh/rc прописывать?
DollyPapper,
man ssh
/etc/ssh/sshrc
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.
y0sh, да, но вопрос был, про любого пользователя. Т.е. нужно всем пользователям в профиле прописывать тот код который необходимо запустить при логине.
Если оболочка в системе баш (мб с другими тоже будет работать, если они читают этот файл), то можно внести необходимый код в /etc/profile, этот файл читается башем при входе в систему удаленных пользователей, в частности по ssh. Это наиболее нативный способ, который будет работать везде и для всех пользователей. Если нужно для какого-то конкретного пользователя, то ~/.bash_profile — так же работает при входе с удаленного сеанса, но уже конкретного пользователя.
DollyPapper,
1. sftp подсистема sshd
2. юзер может быть без шелла, или шелл не bash
3. туннель через ssh тоже башевские конфиги не затронет
4. велосипед уже изобретен до нас и описан в документации
5. мелкий нюанс. пользовательский ~/ssh/rc приоритетней системного /etc/ssh/sshrc
тут это не сработает. Хотя у других шеллов может быть что-то своё, а возможно этот шелл будет читать /etc/profile.
unixforum.org
Как при входе любого пользователя запустить скрипт?
Как при входе любого пользователя запустить скрипт?
Сообщение zshgm » 15.06.2010 17:02
Как при входе любого пользователя запустить скрипт? Тоесть польователь может зайти к примеру удаленно по ssh под пользователем user1 или локально под пользователем root. В обоих случаях нужно запускать скрипт. как?
Re: Как при входе любого пользователя запустить скрипт?
Сообщение zshgm » 15.06.2010 17:13
Как при входе любого пользователя запустить скрипт? Тоесть польователь может зайти к примеру удаленно по ssh под пользователем user1 или локально под пользователем root. В обоих случаях нужно запускать скрипт. как?
разобрался.. можно записать в /etc/profile
drBatty Сообщения: 8735 Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит. ОС: Slackware-current Контактная информация:
Re: Как при входе любого пользователя запустить скрипт?
Сообщение drBatty » 15.06.2010 17:36
юзер может зайти минуя этот файл. внимательно посмотрите man login, и man bash (если юзер входит в bash)
Re: Как при входе любого пользователя запустить скрипт?
Сообщение zshgm » 15.06.2010 18:17
юзер может зайти минуя этот файл. внимательно посмотрите man login, и man bash (если юзер входит в bash)
Подскажите пжлста по подробнее, если можно с примерами как еще можно зайти минуя profile? И как это можно будет отследить
P.S.: Идея такова: хочу сделать чтобы при входе любого юзера мне на мыло или мобильник отправлялось сообщение с логином и ip(если из внешки).. Поэтому мне нужно предугадать все способы авторизации в системе..
watashiwa_daredeska Бывший модератор Сообщения: 4038 Статус: Искусственный интеллект (pre-alpha) ОС: Debian GNU/Linux
Re: Как при входе любого пользователя запустить скрипт?
drBatty Сообщения: 8735 Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит. ОС: Slackware-current Контактная информация:
Re: Как при входе любого пользователя запустить скрипт?
Сообщение drBatty » 15.06.2010 18:30
это от системы сильно зависит. не знаю как у вас. ИМХО надёжнее проверять тех, кто в системе (можно убрать тех кто там всегда, например root’а, с его демонами). (man ps)
ну и можно посмотреть, как входит юзер, через что. вот например для sshd
8. If ~/.ssh/rc exists, runs it; else if /etc/ssh/sshrc exists, runs it; otherwise runs xauth. The
“rc” files are given the X11 authentication protocol and cookie in standard input. See SSHRC,
below.
т.е., перед входом юзера по ssh запускается /etc/ssh/sshrc
(только всё это возможно дистроспецифично — лучше свои маны читать, там написано как оно у вас. например я слышал, в вашей ос вообще какой-то свой dash, а не bash)
Re: Как при входе любого пользователя запустить скрипт?
Сообщение zshgm » 15.06.2010 18:37
watashiwa_daredeska Бывший модератор Сообщения: 4038 Статус: Искусственный интеллект (pre-alpha) ОС: Debian GNU/Linux
Re: Как при входе любого пользователя запустить скрипт?
Тут даже —noprofile не нужен. bash не исполняет .profile, если он не login shell, а тут он не login. У меня даже специательный суперскрипт имеется, чтобы запускать программы сразу по ssh так, как будто я полноценно залогинился (почти):
#!/bin/sh # This script is called run-with-profile (or rwp for short) if [ -r $HOME/.profile ]; then . $HOME/.profile elif [ -r $HOME/.bash_profile ]; then . $HOME/.bash_profile fi exec "$@"
Теперь по ssh -t user@host rwp screen -DR default я попадаю сразу в свою любимую screen-сессию со всеми причиндалами 🙂
Re: Как при входе любого пользователя запустить скрипт?
Сообщение zshgm » 15.06.2010 18:56
Тут даже —noprofile не нужен. bash не исполняет .profile, если он не login shell, а тут он не login. У меня даже специательный суперскрипт имеется, чтобы запускать программы сразу по ssh так, как будто я полноценно залогинился (почти):
#!/bin/sh # This script is called run-with-profile (or rwp for short) if [ -r $HOME/.profile ]; then . $HOME/.profile elif [ -r $HOME/.bash_profile ]; then . $HOME/.bash_profile fi exec "$@"
Теперь по ssh -t user@host rwp screen -DR default я попадаю сразу в свою любимую screen-сессию со всеми причиндалами
Можно ли отловить вход пользователя не используя PAM если bash не login shell? Желательно стандартными средствами которые есть в любом дистрибутиве без предварительной настройки и установки какого-либо софта..