Это расширение моего предыдущего вопроса . Мне нужно запустить локально сохраненную команду (т.е. mount /home
) на удаленной машине при входе в систему через ssh. На данный момент я использую:
ssh -t mymachine.example.com 'mount /home ; /bin/bash'
это прекрасно работает, но мне было интересно, смогу ли я вставить эту команду в свою, .ssh/config
чтобы мне не приходилось вводить ее каждый раз. Я нашел LocalCommand
вариант, но не вижу RemoteCommand
варианта.
Важно, чтобы command-to-be-executed
он хранился на локальном компьютере, так как он будет содержать пароль для открытия зашифрованного диска. Вот почему я не могу поместить команду .profile
на удаленной машине.
~/.ssh/rc
снова хранится на удаленной машине. Что касается вашего комментария обps
отображении параметров моей командной строки (включая пароль), это меня не беспокоит. Это удаленная машина, которой я не доверяю. Моя локальная машина используется только мной, поэтому никто другой не имеет к ней доступаps
.ps
выход является с удаленного компьютера. Дело в том, что все, что вы предоставляетеssh
в качестве удаленной команды, будет отображаться на удаленном сервереps
.Это было добавлено в OpenSSH 7.6:
ссылка: https://www.openssh.com/txt/release-7.6
источник
источник
Вы можете сделать это с помощью удаленной машины следующим образом.
На вашей локальной машине введите команду для запуска в переменной окружения
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), и не отключать при выходе из системы. Моя рекомендация для этого варианта использования по- прежнему заключается в том, чтобы явно выполнить монтирование, затем запускать удаленные команды, не делая ничего особенного, и отключать, когда вы больше не хотите обращаться к этой файловой системе.
источник
Я не пробовал это, но подход может быть
Subsystem
на удаленном компьютере,sshd_config
который выполняет команду, которую вы хотите, прочитав некоторые env varsSendEnv
на локальном компьютере.ssh/config
для передачи таких ключей на удаленный серверисточник