ssh_config: вказати команду, яку потрібно виконати на віддаленій машині після входу


16

Це розширення мого попереднього питання . Мені потрібно запустити локально збережену команду (тобто mount /home) на віддаленій машині після входу в ssh. На даний момент я використовую:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

що добре працює, але мені було цікаво, чи можу я ввести цю команду в свою, .ssh/configщоб мені не потрібно було її друкувати щоразу. Я знайшов LocalCommandваріант, але не бачу жодного RemoteCommandваріанту.

Важливо, щоб command-to-be-executedвін зберігався на локальній машині, оскільки він буде містити пароль для відкриття зашифрованого диска. Ось чому я не можу поставити команду .profileна віддалену машину.

Відповіді:


6

Це питання вже задавали на SuperUser. Перша відповідь використовує віддалений файл, який не відповідає вашим вимогам, але друга відповідь, яка пропонує використовувати локальний псевдонім, може бути вирішенням вашої проблеми.

Важливо, щоб виконувану команду зберігати на локальній машині, оскільки вона буде містити пароль для відкриття зашифрованого диска. Ось чому я не можу поставити команду в .profile на віддаленій машині.

Це, мабуть, не безпечно. Якщо я використовую echoкоманду як ssh команду, вона відображається psна віддаленому сервері:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo

дякую, але в розчині на SuperUser ~/.ssh/rcзнову зберігається на віддаленій машині. Щодо Вашого коментаря щодо psпоказу параметрів мого командного рядка (включаючи пароль), це мене не турбує. Я не довіряю віддаленій машині. Мою локальну машину використовує лише я, тому ніхто більше не має доступу до неї ps.
Мартін Вегтер

6
Цей psвихід є з віддаленого комп'ютера. Справа в тому, що все, що ви надаєте sshяк віддалену команду, з’явиться на віддаленому сервері в ps.
Мартін фон Віттіч

1
Так, ти правий. Дякуємо, що вказали на це.
Мартін Вегтер

1
@MartinvonWittich - Кожен веб-сайт SE незалежний, тому для кожного сайту цілком прийнятно мати подібні запитання та відповіді, якщо вони обговорюються на цьому конкретному сайті. Рекомендується копіювати вміст, якщо з'являється Q, а A - на іншому веб-сайті SE. Налаштуйте його відповідно до теми, щоб це було на тему.
slm

7

Це було додано у OpenSSH 7.6:

додайте опцію RemoteCommand, щоб вказати команду у файлі ssh config, а не давати її в командному рядку клієнта. Це дозволяє файлу конфігурації вказати команду, яка буде виконуватися на віддаленому хості.

посилання: https://www.openssh.com/txt/release-7.6



2

Зробити це можна за допомогою співпраці віддаленої машини наступним чином.

На локальній машині введіть команду для запуску в змінну середовища LC_SSH_INITIAL_COMMAND. SSH, як правило, налаштовано для передачі всіх змінних середовища форми LC_*, тому що це звичайні параметри локалі.

На віддаленій машині запустіть eval "$LC_SSH_INITIAL_COMMAND" через налаштування на ключ~/.ssh/authorized_keys або з нього ~/.ssh/rc(будьте уважні, якщо у вас є ~/.ssh/rcфайл, вам потрібно подбати про запуск xauthвручну для переадресації X11).

За допомогою authorized_keysметоду ви можете аналогічно запустити команду, коли сеанс SSH закінчується (якщо процес оболонки не вбивається різко; вам слід принаймні зафіксувати сигнал HUP, щоб ваша команда виконувалася, навіть якщо з'єднання загине).

Однак це не дуже вдале рішення для створення чогось глобального, наприклад, монтажу файлової системи. Вам потрібно буде подбати про те, щоб не монтуватися знову, якщо файлова система вже встановлена ​​(наприклад, завдяки одночасно запущеній команді SSH), а також не відключати її під час виходу. Моя рекомендація щодо цього випадку використання - це все-таки виконати монтаж явно, потім запустити віддалені команди, не роблячи нічого особливого, і відключити його, коли ви більше не хочете отримувати доступ до цієї файлової системи.


0

Я не пробував цього, але підхід може бути

  • Оголосіть a Subsystemна пульті дистанційного керування, sshd_configякий виконує потрібну команду, прочитавши деякі програми env
  • Використовуйте SendEnvна локальному рівні, .ssh/configщоб передати такі ключі на віддалений сервер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.