Ssh с командой.... Плюс оболочка

Мне нужна команда, которая ssh'es в машину, запускает команду (cd или выполняет script или su), а затем дает мне оболочку. Передача команды в ssh, похоже, всегда завершается.

Некоторые примеры того, что я ищу: 'ssh me @machine1 "./executeMyScript & cd/developmentDirectory" ', а затем он возвращает мне мою оболочку.

Причины, по которым я хочу это сделать, это то, что я использую mrxvt (условия с вкладками x), что позволяет мне определять команды для всех моих вкладок для запуска при запуске. Я хотел бы иметь несколько подключений ssh ​​к одному и тому же компьютеру, но им нужно делать разные вещи после sshing.

Роб

Спасибо!

Ответы

Ответ 1

Вариация на других ответах действительно, используйте параметр -t ssh для принудительного распределения псевдо-tty:

ssh -t [email protected] ./executeMyScript '&&' bash -i

Ответ 2

Как насчет

    ssh [email protected] ./executeMyScript '&&' bash -i

Вы должны процитировать &&, поэтому он будет передан удаленной машине вместо проглатывания локальной оболочкой.

Введите символ ';', и вы также можете изменить свой стартовый каталог:

    ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i

Ответ 3

Поместите что-то вроде этого в конец script, который вы хотите запустить:

bash -li

Запускает Bash в качестве интерактивной оболочки входа. Это не идеально, поскольку вы будете пропускать такие вещи, как TERM пересылка, но это может быть адекватно вашим потребностям.

Если этого недостаточно, я бы просто сделал два отдельных ssh-вызова, один для запуска script, а другой для входа в систему.

Ответ 4

Как использовать параметр SendEnv в ssh_config для отправки определенной среды с локального компьютера на ваш удаленный компьютер, после чего проверяя эту переменную среды в конфигурации удаленного хоста?

В вашем .ssh/special-config файле:

remotehost:
    SendEnv *

Ваш локальный script:

RUN_THIS_FIRST_COMMAND=blah
ssh -F special-config-file

Ваш удаленный файл .bash_profile:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then
    $RUN_THIS_FIRST_COMMAND
fi

Возможно, вам нужно будет проверить некоторые из этих строк, я просто выбросил их вместе с man-страницами и раньше не пробовал. Лично мне не нравится изменять как локальную, так и удаленную среду для этого решения.

Ответ 5

Это работает для меня.

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i"