Linux авторизация в скрипте

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.

Читайте также:  Аналог sound forge linux

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.

Источник

Автоматическое подключение по ssh из скрипта

При первом подключении к серверу, нужно ответить «yes», что означает — мы доверяем этому серверу. Кроме того, при изменении ключа сервера, надо удалить старый ключ из файла known_hosts . Если аутентификация по ключу в силу каких-то причин невозможна, нужно как-то передать пароль ssh-клиенту. При подключении к серверу из shell-скрипта, нам нужно решить эти три задачи.

Первая задача

Для предотвращения атак «человек посередине» при подключении к серверу, ключ которого ещё не известен ssh-клиенту, будет показан «слепок ключа» (key fingerprint). Нам нужно сравнить этот слепок со слепком ключа сервера, который мы получили по надежному каналу связи. И только после этого ответить «yes» — мы доверяем этому серверу. Выглядит это примерно так:

$ ssh evgeniy@123.123.123.123 The authenticity of host 'server.com (123.123.123.123)' can't be established. ECDSA key fingerprint is SHA256:l8UgO9Gw44QPlLOGq1wyPQR3vfVdiWWbMwZQhqkq3V8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '123.123.123.123' (ECDSA) to the list of known hosts. evgeniy@123.123.123.123's password: пароль Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-76-generic x86_64)

При утвердительном ответе yes , ssh-клиент продолжит подключение, сохранив ключ сервера в файле ~/.ssh/known_hosts . В противном случае подключение к серверу будет прервано. Чтобы это обойти, нужно добавить опцию StrictHostKeyChecking , которая отключает проверку и сразу добавляет ключ сервера в файл ~/.ssh/known_hosts .

$ ssh -o StrictHostKeyChecking=no evgeniy@123.123.123.123 Warning: Permanently added '123.123.123.123' (ECDSA) to the list of known hosts. evgeniy@123.123.123.123's password: пароль Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-76-generic x86_64)

Вторая задача

При попытке подключения после изменения ключа на удаленном сервере (это происходит при переустановке операционной системы или пакета openssh-server ), появляется сообщение с ошибкой:

$ ssh evgeniy@123.123.123.123 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:BcWqgw+jx6NFmMcnBSXplEWVG33lCbDRShwY1zT1qk8. Please contact your system administrator. Add correct host key in /home/evgeniy/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/evgeniy/.ssh/known_hosts:2 remove with: ssh-keygen -f "/home/evgeniy/.ssh/known_hosts" -R "123.123.123.123" Password authentication is disabled to avoid man-in-the-middle attacks. Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks. evgeniy@123.123.123.123: Permission denied (publickey,password).

Еще одна причина появления такого сообщения — изменение ip-адреса сервера, потому что ключ в known_hosts хранится в привязке к ip-адресу.

Читайте также:  Linux check serial ports

В сообщении можно увидеть, что вторая строка файла ~/.ssh/known_hosts содержит неправильный ключ. И подсказку, как удалить этот ключ (неправильную строку):

$ ssh-keygen -f "/home/evgeniy/.ssh/known_hosts" -R "123.123.123.123" Host 123.123.123.123 found: line 2 /home/evgeniy/.ssh/known_hosts updated. Original contents retained as /home/evgeniy/.ssh/known_hosts.old

Неправильная строка теперь удалена, а исходный файл на всякий случай сохранён под именем known_hosts.old . Еще раз пробуем подключиться:

$ ssh -o StrictHostKeyChecking=no evgeniy@123.123.123.123 Warning: Permanently added '123.123.123.123' (ECDSA) to the list of known hosts. evgeniy@123.123.123.123's password: пароль Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-76-generic x86_64)

Но удаление записи в файле known_hosts требует ручного вмешательства, а нам нужно, чтобы подключение к серверу происходило из скрипта, без нашего участия. И здесь на помощь приходит еще одна опция — UserKnownHostsFile . Можно вообще не записывать ключ сервера в файл known_hosts , указав значение этой опции как /dev/null . Тогда и удалять неправильный ключ будет не нужно:

$ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null evgeniy@123.123.123.123 Warning: Permanently added '123.123.123.123' (ECDSA) to the list of known hosts. evgeniy@123.123.123.123's password: пароль Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-101-generic x86_64)

Третья задача

Теперь почти все хорошо, осталось еще решить вопрос с паролем. В этом нам поможет утилита sshpass :

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

$ sshpass -p 'qwerty' ssh -o StrictHostKeyChecking=no \ > -o UserKnownHostsFile=/dev/null evgeniy@123.123.123.123 Warning: Permanently added '123.123.123.123' (ECDSA) to the list of known hosts. Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-101-generic x86_64)

Также, пароль можно записать в файл, только не забыть выставить для него права:

$ sshpass -f /home/evgeniy/server.secret ssh -o StrictHostKeyChecking=no \ > -o UserKnownHostsFile=/dev/null evgeniy@123.123.123.123 Warning: Permanently added '123.123.123.123' (ECDSA) to the list of known hosts. Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-101-generic x86_64)

Опции StrictHostKeyChecking и UserKnownHostsFile могут быть заданы постоянно в ~/.ssh/config (для текущего пользователя) или в /etc/ssh/ssh_config (для всех пользователей).

$ nano /home/evgeniy/.ssh/config
Host some-server HostName 123.123.123.123 User evgeniy StrictHostKeyChecking no UserKnownHostsFile /dev/null

Теперь подключаться к серверу 123.123.123.123 можно так:

$ sshpass -p 'qwerty' ssh some-server

Но тут надо учитывать, от имени какого пользователя будет запускаться скрипт. Например, если скрипт запускается от root , то и файл конфигурации должен быть размещен в /root/.ssh/config . Иначе нужно явно указать, где расположен файл с настройками ssh-клиента:

# sshpass -f /home/evgeniy/some-server.secret ssh -F /home/evgeniy/.ssh/config some-server

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Читайте также:  Чем открыть html linux

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

  • 1С:Предприятие (31)
  • API (29)
  • Bash (43)
  • CLI (99)
  • CMS (139)
  • CSS (50)
  • Frontend (75)
  • HTML (66)
  • JavaScript (150)
  • Laravel (72)
  • Linux (145)
  • MySQL (76)
  • PHP (125)
  • React.js (66)
  • SSH (27)
  • Ubuntu (68)
  • Web-разработка (509)
  • WordPress (73)
  • Yii2 (69)
  • БазаДанных (95)
  • Битрикс (66)
  • Блог (29)
  • Верстка (43)
  • ИнтернетМагаз… (84)
  • КаталогТоваров (87)
  • Класс (30)
  • Клиент (27)
  • Ключ (28)
  • Команда (68)
  • Компонент (60)
  • Конфигурация (61)
  • Корзина (32)
  • ЛокальнаяСеть (28)
  • Модуль (34)
  • Навигация (31)
  • Настройка (139)
  • ПанельУправле… (29)
  • Плагин (33)
  • Пользователь (26)
  • Практика (99)
  • Сервер (74)
  • Событие (27)
  • Теория (105)
  • Установка (66)
  • Файл (47)
  • Форма (58)
  • Фреймворк (192)
  • Функция (36)
  • ШаблонСайта (68)

Источник

Оцените статью
Adblock
detector