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, если они находятся в теме этого конкретного сайта. Рекомендуется копировать контент, если появляется Q и A находится на другом сайте SE. Настройте его соответствующим образом, так что это по теме.
SLM
7

Это было добавлено в OpenSSH 7.6:

добавьте опцию RemoteCommand, чтобы указать команду в конфигурационном файле ssh вместо ее указания в командной строке клиента. Это позволяет файлу конфигурации указать команду, которая будет выполняться на удаленном хосте.

ссылка: https://www.openssh.com/txt/release-7.6

Камден Нарзт
источник
6
RequestTTY yes
RemoteCommand screen -UDr
JRG
источник
отличный!! Благодарность!!
шр
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

Я не пробовал это, но подход может быть

  • Объявите Subsystemна удаленном компьютере, sshd_configкоторый выполняет команду, которую вы хотите, прочитав некоторые env vars
  • Используйте SendEnvна локальном компьютере .ssh/configдля передачи таких ключей на удаленный сервер
untore
источник