Выполнение команды на удаленном хосте с интерактивным SSH (условно)

9

Я хотел бы иметь возможность автоматически запускать команду на удаленном хосте каждый раз, когда я вхожу на этот хост, но в рамках текущего интерактивного сеанса SSH.

Что-то вроде

ssh user@remotehost [run do.sh]

где do.shвыполняет несколько служебных задач, а затем снова подключается к screenсеансу (в настоящее время я запускаю do.shвручную после входа на хост).

Я не хочу добавлять его, .bashrcпотому что я регистрируюсь на этом хосте с других машин, и я не хочу do.shзапускаться, когда я делаю вход оттуда, поэтому мне нужно, чтобы это было необязательно.

Джим Фаркас
источник
1
почему ты просто не бежишь ssh user@remotehost /path/to/do.sh? Если это работает, вы даже можете использовать псевдоним в .ssh / config или в вашем личном .bashrc
Coren
Итак, вы хотите запускать «do.sh», когда вы входите на удаленный хост откуда-то, а не когда вы входите на удаленный хост от кого-то еще? Какие хосты подключения из должны вызвать «do.sh», и которые другие не должны?
Мат
Да, я хочу запускать его иногда, но не всегда, причина этого в том, что у меня есть ярлык клавиатуры из панели запуска на моем Mac, который дает мне то, что я хочу, большую часть времени. Я нажал на ярлык, и я хочу вставить ssh в поле, а затем снова подключиться к экранной сессии, но я не хочу этого делать, если я использую обычный терминал, такой как «ssh user @ host». Решение, упомянутое ниже Паткосом, делает именно то, что мне нужно.
Джим Фаркас

Ответы:

15

Вы можете попробовать что-то вроде этого:

ssh server -t "do.sh; bash --login"

как предложено здесь: /server/167416/change-directory-automatics-on-ssh-login

Или вы можете попробовать использовать опцию «LocalCommand» в sshd_conf (или ~ / .ssh / config), как описано на официальной странице руководства: http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1

Паткос Чаба
источник
1
Спасибо!! Сервер SSH -t "/home/user/do.sh; bash --login" работал для меня. köszönöm szépen!
Джим Фаркас
1
Szivesen (Добро пожаловать)
Паткос Чаба
@PatkosCsaba Пожалуйста, избегайте языков здесь, кроме английского. Это относится и к комментариям.
LinuxSecurityFreak
3

Одна часть головоломки: предполагая OpenSSH, sshклиент установит следующую переменную среды:

SSH_CONNECTION Определяет клиент и сервер конца соединения. Переменная содержит четыре значения, разделенных пробелами: IP-адрес клиента, номер порта клиента, IP-адрес сервера и номер порта сервера.

Таким образом, вы можете использовать эту информацию, чтобы узнать, откуда происходит ваше соединение .

Sr-
источник