2012-03-22 7 views
6

Если я уже установил открытый ключ на удаленный хост. Таким образом, проблема с вводом пароля отсутствует.как ssh на удаленный хост и немедленно выполнить команду

Я хочу войти на удаленную машину и сразу же выполнить screen -r. Есть ли способ достичь этого?

Например:

ssh example.com ; screen -r 

Но это неверно, так как screen -r не будет посылать на удаленный хост.

+0

Для команды 'screen' может потребоваться TTL. Другие команды работают нормально, но, как указано в ответах, вам нужны команды 'ssh host '' – gahooa

ответ

6

Удалите точку с запятой из вашего примера:

ssh example.com "screen -r" 

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


* РЕДАКТИРОВАТЬ 1 *

Для запуска нескольких команд, просто строку их вместе, разделенных точкой с запятой:

ssh example.com "screen -r; ls -al; ps -elfc" 

* РЕДАКТИРОВАТЬ 2 *

Все еще не полностью что вы пытаетесь выполнить (был ли пример screen -r, или вы действительно пытаетесь просто сгруппировать кучу команд вместе?). В любом случае, я о внесении изменений моего ответа, чтобы покрыть больше возможностей:

приковать случайные команды вместе:

ssh example.com "ps -elfc; ls" 

Чтобы запустить некоторые случайные команды после запуска экрана:

ssh -t example.com "screen -r; ls" 

специально запуск и посылать ему команды:

ssh -t example.com "screen -r -X ls" 
+0

: «Должен быть подключен к терминалу». Это не мое желание. Я хочу продолжать использовать этот хост после 'screen -r'. –

+0

Я предполагаю, что, продолжая использовать этот хост, вы подразумеваете, что хотите выпустить строку команд. Для этого отредактируйте свой ответ. Как я уже говорил, «screen -r» просто не будет работать без подключенного терминала, и у вас не будет терминала, если вы используете удаленные команды через ssh. – Perception

+0

@perception: «у вас не будет терминала, если вы используете удаленные команды через ssh», это неверно - см. Мой ответ для уточнения. – amcnabb

1

http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1

SSH [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec] [-D [bind_address:] порт] [-e escape_char] [-F CONFIGFILE] [-i identity_file] [-L [bind_address:] port: host: hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-R [bind_address:] port: host: hostport] [-S ctl_path] [-w туннель: туннель] [пользователь @] имя хоста [команда]

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

Не уверен, что это будет работать или нет, поскольку экран является нечетной программой для этого, но ssh blah.com 'screen -r' - правильный синтаксис.

1

Это будет работать

ssh [email protected] 'ls -l' 
+0

Это неправильно. Выходы будут выполняться командой * ls -l *, а затем вывести ее и поместить в качестве аргумента в * ssh root @ something * – Corbin

+0

К сожалению! Опечатка! Я имел в виду «а не». Исправлено –

+0

Это не мое желание. Я хочу продолжать использовать этот хост после 'screen -r'. –

1

Попробуйте использовать одиночные кавычки:

ssh example.com 'screen -r' 
+0

цитаты не нужны – salva

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. –

+0

@SamiKuhmonen, с кем вы обращаетесь? –

1

Просто поместите команду, которую вы хотите запустить после имени хоста:

ssh example.com screen -r 
8

При запуске команды на удаленном хосте, по умолчанию ssh не будет выделять псевдотерминал. Если вы запускаете интерактивную программу, такую ​​как экран на удаленном хосте, у вас должен быть псевдотерминал. Опция -t делает это возможным. Попробуйте:

ssh -t example.com "screen -r" 
0

попробовать этот ...

ssh -XY -t [email protected]_IP 'ssh -XY -t [email protected]_IP' 

вы можете продолжать с командой screen -r или любой другой на удаленныйToRemote_IP машина.

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