Як автоматично запускати команди при вході в SSH?


18

Щоразу, коли я входжу на свій сервер Linux, я б хотів, щоб кілька команд запускалися автоматично (встановити деякі змінні, змінити місцезнаходження тощо)

Це потрібно зробити при вході в систему, а не при запуску системи.

Як я можу це зробити для цього?


Вам потрібно прочитати розділ INVOCATION в bash (1) ( man bash).
Ендрю Шульман

Відповіді:


31

Поставте команди ~/.bashrc. Все, що там знаходиться, виконується кожного разу при вході в систему.

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


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

5
Це передбачає, що ~ / .bashrc походить з вашого ~ / .bash_profile. ~ / .bash_profile буде скриптом, який викликається для оболонки входу, наприклад ssh. Я вірю, що ~ / .bashrc зателефонує, якщо ви відкриєте термінал Gnome, наприклад, ПІСЛЯ вже
ввійшовши

Ви збентежили мене, дозвольте мені пояснити більше: Це екземпляр Amazon Web Services, який практично є сервером, тому ніхто ніколи фізично не входитиме в систему (я навіть не впевнений, чи фізично він існує як одна машина). Я входжу за допомогою PUTTY з ім'ям користувача ec2-user. Це вводить мене в / home / ec2-користувальницький каталог. Потім я переходжу на root користувача, ввівши "sudo su -", який потім перекидає мене на "/ root", тоді я повинен набрати ряд команд, включаючи зміну мене на "/ home / ec2-user" та встановлення деяких змінні, псевдоніми тощо. Отже ... як я змусив це зробити це?

Крім того, оскільки я змінюю користувача, я очікую, що в баш-профілі ec2-користувача я повинен містити лише "sudo su -", а потім решта команд у кореневому файлі bash?

ПРИМІТКА: насправді це .profile, який викликається, якщо він існує, якщо не існує .bash_profile, тоді він називається замість нього.
дгрант

14

Просто введіть це в ~ / .bashrc або /etc/bash.bashrc, якщо ви хочете цього для всіх користувачів:

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

і як я втрачаю сеанс після завершення виконання?
e-info128

1
@WHK Що ти маєш на увазі, втративши сеанс?
Llamageddon

@Llamageddon: Я думаю, що йому цікаво те саме, що і я. Якби я хотів розмістити всю свою сесію SSH screen, я можу використати вашу відповідь і поставити screenтам замість відлуння. Проблема в тому, що завершення сеансу на екрані повернеться до підказки SSH замість виходу з системи. Щойно виписавши цей коментар, я дав мені відповідь: додайте logoutкоманду після screenкоманди.
zondo

Це, однак, не працює для ssh сесії, в якій не використовується bash, наприклад, коли я відкриваю сеанс sftp.
Фабіо

@zondo @ e-info128 exec commandзамінить поточну оболонку будь -якою програмою .
Llamageddon

6

Крім того, ви можете вказати команду, яку слід запустити під час виклику ssh:

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

Остання команда у списку повинна починати інтерактивний сеанс у вибраній оболонці. Якщо у вас є багато команд для запуску, подумайте про створення сценарію на вашому сервері SSH.


1
ЦЕ дуже корисно. Не впевнений, чи це точно відповідь, яку запитував запитуючий, але люди повинні знати про це, оскільки це може бути не очевидно. Наприклад, експортувати "ssh user @ host" x = 5; bash "Потім у терміналі, що спливає echo $ x відображається 5.
clearlight

3

Насправді ~/.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.

Не обов'язково. Це місце , де команди можуть бути поміщені.
Даніель Б


Це дійсно могло б когось занепокоїти, якщо вони не знали, що роблять. Це може бути корисним у кутових випадках, але це дійсно може зіпсувати когось, якщо вони забули, що вони там кладуть команди чи ім'я та шлях цього файлу. Загалом, вкрай бажано буде розміщувати команди для входу в очікуване місце, .bashrc на віддалену сторону і перевіряти на $ SSH_CONNECTION, як пропонують інші відповіді.
clearlight
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.