5

Вопрос по remote-server, command, ssh, unix, shell – Ssh-скрипт UNIX, выполняющий команды на удаленном сервере

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

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

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

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

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

    от
  • @brjones, эта ссылка должна помочь,ssh.com/support/documentation/online/ssh/adminguide/32/…

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

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

    от
  • почему это должно быть', не" вssh thehost 'cd /tmp; ls; echo Hello world, I am имя хоста'

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

    от nik
  • Если вы настаиваете на выполнении команд через ssh, вам придется ставить перед каждой командой префиксssh [email protected] exec  фраза. Однако я хочу знать, используете ли вы вышеперечисленные & quot; получить файл & quot; пример в качестве ссылки? и у вас есть более сложная последовательность команд для выполнения таким образом?

    от nik
10 ответов
  • 0

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

    который присутствует на localhost

    ssh remote [email protected] < localScript.sh

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

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

  • 0

    Несколько человек уже объяснили

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

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

  • 2

    ssh в сценарии не работает таким образом. Однако у него есть возможнос

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

    ssh [email protected] do_foo.sh

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

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

  • 1

    УПП? Remote - это устройство с файловой системой только для чтения. Я

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

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

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

  • 2

    В дополнение к ответу Tiemen

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

    ssh thehost < commands.sh
    

  • 13

    Кроме того

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

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

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

    ssh localhost 'cat /bin/bash' > local_bash
    

  • 3

    Вы должны использовать ssh [email protected] exec /path/to/script/script.sh

    Вы должны использовать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 .
    

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

  • 5

    Если ваша цель только для передачи файлов

    вы должны использовать scp. Но для выполнения некоторых команд на удаленном хосте без специального сценария на этом удаленном хосте вы можете просто использовать stdin следующим образом:

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

  • 0

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

    УПП?

  • 14

    Вы должны использовать

    УПП ("Безопасная копия"), а неSSH («Безопасная оболочка»).