2009-10-27 6 views
14

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

Некоторые примеры того, что я ищу: «SSH меня @ machine1„./executeMyScript & & кд/developmentDirectory“», а затем он дает мне свою раковину назад.

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

-Rob

Спасибо!

ответ

10

Вариации на другие ответы на самом деле, использование опции -t SSH, чтобы заставить выделение псевдо-терминальную:

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

спасибо! при первом осмотре, который работает точно так, как мне хотелось бы! Ура для "-t"! – robarson

+0

Даже если этот вопрос был удовлетворен, если кто-то читает, знаете ли вы, как я могу иметь экземпляр bash, который я начинаю с этой команды, открываем emacs (так что, когда я закрываю emacs, он возвращается к моему терминалу bash) ? Heck..это что-то, что открывает emacs без bash, было бы хорошим (так, чтобы emacs не выходил сразу после запуска). – robarson

4

Как насчет

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

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

процитировать ';' характер, и вы можете изменить свой начальный каталог, тоже:

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

Спасибо. Призыв к bash работал ...infosar, поскольку он дал мне раковину. К сожалению, это не очень хорошо .. простые сочетания клавиш, такие как ctrl^a, не работают, что означает, что мне нужно попробовать и найти другое решение. Кстати, он также распечатывает «bash: без управления заданиями в этой оболочке». – robarson

+3

Попробуйте опцию '-t':' ssh -t me @ machine ... ' – mob

2

Положите что-то вроде этого в конце сценария вы хотите запустить:

bash -li 

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

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

+0

+1 для двух отдельных команд ssh. KISS –

2

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

В вашем .ssh/специального конфиг-файла:

remotehost: 
    SendEnv * 

Ваш местный сценарий:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

Пульт .bash_profile:

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

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

0

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

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

Почему это сработало для вас? Дайте немного больше деталей, чтобы OP мог понять, почему вы написали, что вы сделали. – rayryeng

+1

Это также более или менее прямая копия существующего выбранного ответа, отправленного 4 года назад ... – Synchro

+0

Объяснение было бы приятным. –

 Смежные вопросы

  • Нет связанных вопросов^_^