Ssh-скрипт UNIX, выполняющий команды на удаленном сервере - PullRequest
5 голосов
/ 16 июня 2009

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

!/bin/sh
ssh -o PreferredAuthentications=publickey brjones@server.com
cd ~/folder
"i would like to grab file and copy it to client machines folder"

РЕДАКТИРОВАТЬ: я не уверен, что вы заметили, но я использовал без пароля подключение к удаленному серверу с использованием ssh и генерации ключей. Я ценю идеи, но я ищу, возможно, конвейерные команды или запускать команды на удаленном сервере со сценарием на клиенте. Я понимаю, что удаленный сервер не имеет доступа к клиентскому сценарию, однако мне было любопытно, можно ли передать команды через соединение ssh.

Ответы [ 10 ]

14 голосов
/ 16 июня 2009

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

13 голосов
/ 16 июня 2009

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

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

и для копирования без SCP:

ssh localhost 'cat /bin/bash' > local_bash
5 голосов
/ 17 июня 2009

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

!/bin/sh
ssh -o PreferredAuthentications=publickey brjones@server.com << EOT
cd ~/folder
echo "hello" > hello.txt
...
EOT
3 голосов
/ 16 июня 2009

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

ssh user@server exec /path/to/script/script.sh

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


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

scp script.sh user@server:/path/to/script/

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

scp user@server:/path/to/file/filename .

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

2 голосов
/ 12 ноября 2013

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

ssh thehost < commands.sh
2 голосов
/ 16 июня 2009

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

ssh brjones@server.com do_foo.sh

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

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

1 голос
/ 02 февраля 2011

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

отличное решение от Yarek T:

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

0 голосов
/ 13 мая 2015

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

ssh remote Password@remoteHostname < localScript.sh

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

ssh remote Password@remoteHostname "$PATH_OF_SCRIPT/remoteScript.sh"

0 голосов
/ 16 июня 2009

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

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

0 голосов
/ 16 июня 2009

Почему бы не использовать scp ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...