2013-10-09 5 views
0

Я зашел в удаленную машину через скрипт оболочки (поместив команду ssh в скрипт). После команды ssh Остальные строки скрипта выполняются на текущем компьютере, а не на удаленной машине. Как заставить остальные строки сценария оболочки выполняться на удаленной машине.?выполнить часть скрипта оболочки на удаленном компьютере

Допустим, это мой сценарий

ssh [email protected] 
ls 
whoami 
---- 

Остальные строки после того, как SSH должны выполняться на удаленном компьютере, а не на текущей машине. Как достичь этого?

+0

Возможный дубликат [Как ssh из скрипта bash?] (Http://stackoverflow.com/questions/1895185/how-to-ssh-from-within-a-bash-script) –

ответ

0

Используйте команду ssh с параметрами -t. Например:

ssh -t myremotehost 'uptime' 
[email protected]'s password: 
10:14:14 up 91 days, 21:20, 5 users, load average: 0.20, 0.35, 0.36 
2

Одним из возможных решений было бы использовать heredoc как в следующем примере:

$ ssh example.foo.com -- <<@@ 
> ls /etc/ 
> cat /etc/passwd 
> @@ 

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

Вы также можете использовать содержимое файла, либо читать содержимое файла в переменную:

$ MYVAR=`cat ~/foo.txt` 
$ ssh example.foo.com -- <<@@ 
> $MYVAR 
> @@ 

или просто выполняя те же действия внутри Heredoc:

$ ssh example.foo.com -- <<@@ 
> `cat ~/foo.txt` 
> @@ 
+0

Допустим, У меня есть 120-130 строк, которые нужно выполнить на удаленной машине. Тогда как я могу передать эти строки в качестве аргумента для ssh – Stunner

+0

Heredoc все еще может работать. Если эти строки находятся в другом файле, его можно прочитать в переменной, и переменная может быть расширена внутри heredoc. Возможно, это лучший вариант для поиска нескольких команд, первый из которых заключается в том, чтобы подталкивать файл как сценарий в/tmp, а второй - выполнять его. – zzzirk

1

Ваш логин без пароля.

Если да, то вы можете просто использовать трубу, чтобы выполнить инструкцию на удаленном компьютере

как:

cat myshellscript.sh | ssh [email protected] -q 
+0

Нет, у него есть пароль. .. – Stunner

+0

Я читал, что передать пароль в качестве аргумента в ssh невозможно. Это правда? ... – Stunner

+0

Создает пару ключей из вопроса? Необходимость хранить пароль в скрипте, как правило, очень плохая идея. – zzzirk

0

SSH -t пользователь @ RemoteHOST 'Провел' пароль пользователь @ RemoteHOST в: 23 : 35: 33 до 2:05, 3 пользователей, средняя загрузка: 0,79, 0,52, 0,60 Подключение к удаленному закрытому.

Когда вы указываете -t, он открывает терминал на удаленном компьютере и выполняет команду.

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