2009-06-16 3 views
5

Я хотел бы создать скрипт, который автоматически регистрируется на удаленном сервере и захватывает файл на сервере. Сценарий уже регистрируется на сервере, однако команды не запускаются на этом компьютере. Как только я отсоединяюсь от удаленного сервера, команды запускаются на клиентской машине.UNIX ssh script, запущенные команды на удаленном сервере

!/bin/sh 
ssh -o PreferredAuthentications=publickey [email protected] 
cd ~/folder 
"i would like to grab file and copy it to client machines folder" 

EDIT: Я не уверен, если вы заметили, но я использовал беспарольное подключение к удаленному серверу с помощью SSH и keygeneration. Я ценю идеи, но я ищу, возможно, команды на трубе или запускать команды на удаленном сервере со сценарием на клиенте. Я понимаю, что удаленный сервер не имеет доступа к клиентскому скрипту, однако мне было любопытно, можно ли передавать команды через ssh-соединение.

+0

Если вы настаиваете на выполнении команд над ssh, вам придется префикс каждой команды с помощью фразы 'ssh user @ server exec'. Однако, что я хочу знать, вы используете приведенный выше пример «получить файл» в качестве ссылки? и у вас есть более сложная последовательность команд для выполнения этого пути? – nik

+0

авторизацию открытого ключа можно настроить с помощью ssh-keygen на вашем клиенте и файле authorized_keys на сервере (я дал ссылку в своем ответе ниже). – nik

ответ

14

Вы должны использовать scp («защищенная копия»), а не ssh («защищенная оболочка»).

+0

Я использую ssh для удаленного подключения, не вводя пароль, если я использую scp, он попросит пароль ... есть ли способ использовать команду scp с авторизацией ключа? – user123661

+3

scp использует ssh за кулисами. Вы можете использовать опцию -o для передачи любых параметров, которые вы хотите использовать в ssh (например, PreferredAuthentication). – itsadok

2

ssh в скрипте не работает. Однако у него есть возможность выполнить команду на удаленном сервере, указав команду в качестве аргумента в SSH, как:

SSH [email protected] do_foo.sh

будет запускать скрипт do_foo.sh на сервере

Однако для вашей ситуации похоже, что вы действительно ищете SCP.

3

Вы должны использовать ssh таким образом, чтобы выполнять сценарии на удаленных машинах,

ssh [email protected] exec /path/to/script/script.sh 

где script.sh доступен на сервере по заданному пути от user входа.


Если сценарий не присутствует на сервере, но доступны на локальном компьютере (и не имеют общего NFS совместно пространство между двумя машинами), вы должны послать сценарий с scp как это,

scp script.sh [email protected]:/path/to/script/ 

Теперь, для вашего конкретного случая получения файла сервера вы должны просто выполнить,

scp [email protected]:/path/to/file/filename . 

как и некоторые другие ответы уже предлагают.

+0

Мне было интересно, можете ли вы посмотреть мое редактирование и рассказать мне, что вы думаете, или можно использовать авторизацию ключа с помощью SCP. – user123661

+0

авторизация с открытым ключом может выполняться двумя шагами. (1) использовать ssh-keygen для создания пары ключей, а затем (2) скопировать строку открытого ключа в файл 'authorized_keys' на сервере; присутствуют в каталоге '~/.ssh /'. – nik

+0

@brjones, эта ссылка должна помочь, http://www.ssh.com/support/documentation/online/ssh/adminguide/32/Public-Key_Authentication-2.html – nik

0

Несколько человек уже объяснили, как сделать конкретный пример, который вы даете лучше и проще.

Если вы действительно нужду в сценарии удаленного взаимодействия, вы можете рассмотреть возможность использования expect.

13

Кроме того, если вы не хотите, чтобы иметь сценарий доступный на удаленном сервере, выполните следующие действия:

ssh thehost 'cd /tmp; ls; echo Hello world, I am `hostname`' 

и SCP-менее копирования:

ssh localhost 'cat /bin/bash' > local_bash 
+0

почему это должно быть '' ', а не' "' in 'ssh thehost 'cd/tmp; ls; echo Hello world, я' hostname''' –

5

Если ваша цель только для передачи файлов, вы должны использовать scp. Но для выполнения некоторых команд на удаленном хосте, не имея конкретного сценария на этом удаленном хосте, вы можете просто использовать стандартный ввод так:

!/bin/sh 
ssh -o PreferredAuthentications=publickey [email protected] << EOT 
cd ~/folder 
echo "hello" > hello.txt 
... 
EOT 
1

УПП? Remote - это устройство с файловой системой только для чтения. Я не хочу оставлять скрипт позади или использовать множественные вызовы ssh для очистки после или нескольких вызовов для выполнения одной строки за раз. Список можно продолжить ...

great solution here by Yarek T:

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

2

В дополнении к ответу по Tiemen, конечно, вы можете труба команда из вашего локального сценария с:

ssh thehost < commands.sh 
0

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

ssh remote [email protected] < localScript.sh

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

ssh remote [email protected] "$PATH_OF_SCRIPT/remoteScript.sh"