Ответ 1
Вариация на других ответах действительно, используйте параметр -t ssh для принудительного распределения псевдо-tty:
ssh -t [email protected] ./executeMyScript '&&' bash -i
Мне нужна команда, которая ssh'es в машину, запускает команду (cd или выполняет script или su), а затем дает мне оболочку. Передача команды в ssh, похоже, всегда завершается.
Некоторые примеры того, что я ищу: 'ssh me @machine1 "./executeMyScript & cd/developmentDirectory" ', а затем он возвращает мне мою оболочку.
Причины, по которым я хочу это сделать, это то, что я использую mrxvt (условия с вкладками x), что позволяет мне определять команды для всех моих вкладок для запуска при запуске. Я хотел бы иметь несколько подключений ssh к одному и тому же компьютеру, но им нужно делать разные вещи после sshing.
Роб
Спасибо!
Вариация на других ответах действительно, используйте параметр -t ssh для принудительного распределения псевдо-tty:
ssh -t [email protected] ./executeMyScript '&&' bash -i
Как насчет
ssh [email protected] ./executeMyScript '&&' bash -i
Вы должны процитировать &&
, поэтому он будет передан удаленной машине вместо проглатывания локальной оболочкой.
Введите символ ';'
, и вы также можете изменить свой стартовый каталог:
ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i
Поместите что-то вроде этого в конец script, который вы хотите запустить:
bash -li
Запускает Bash в качестве интерактивной оболочки входа. Это не идеально, поскольку вы будете пропускать такие вещи, как TERM
пересылка, но это может быть адекватно вашим потребностям.
Если этого недостаточно, я бы просто сделал два отдельных ssh-вызова, один для запуска script, а другой для входа в систему.
Как использовать параметр 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-страницами и раньше не пробовал. Лично мне не нравится изменять как локальную, так и удаленную среду для этого решения.
Это работает для меня.
/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i"