Как ответить на запрос пароля при использовании SCP в сценарии оболочки? - PullRequest
8 голосов
/ 23 сентября 2009

Прежде всего, я хорошо знаю, что есть много вопросов по этой теме. Я прочитал их, но все же смог найти подходящий ответ для моей ситуации.

Я бы хотел scp весь каталог ~/cs###/assign1 от местного до школьного домашнего каталога с помощью сценария оболочки. У меня вопрос, есть ли способ в моем сценарии дождаться запроса пароля, а затем смоделировать событие клавиатуры для «ввода» моего пароля?


здесь - это действительно подробное руководство по настройке ключа

Ответы [ 12 ]

12 голосов
/ 23 сентября 2009

SSH-ключи не разрешены? Это было бы лучшим решением.

11 голосов
/ 19 декабря 2012

Используйте "sshpass"!

#!/bin/bash
sshpass -p "password" scp -r /some/local/path user@example.com:/some/remote/path
4 голосов
/ 23 сентября 2009

Рассмотрите возможность использования ключей или внешней библиотеки.

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

Существуют библиотеки, которые могут делать то, что вы хотите (использовать протокол SFTP, не вызывая scp), например libssh .

Опять же, я настоятельно рекомендую ключи.

4 голосов
/ 23 сентября 2009

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

Что-то в этом роде

ssh-keygen -t rsa
ssh school mkdir .ssh/
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys"

(или dsa).

Но эй, это не ошибка сервера, не так ли? ; -)

2 голосов
/ 23 сентября 2009

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

2 голосов
/ 23 сентября 2009

Как то так - http://code.google.com/p/enchanter/?

0 голосов
/ 17 ноября 2018

Я не нашел способа сделать это на наших системах автоматически - я ssh подключаюсь к одному устройству, а затем ssh к следующему устройству, и на обоих я не могу установить другое программное обеспечение. Поэтому я могу использовать только существующие команды сценария оболочки. Я могу скопировать все файлы типа с, например * .png, или один за другим в моем файле сценария, при этом необходимо ввести пароль для каждого отдельного файла. Единственное, что я сделал, было полезно ввести пароль в файл, вырезать его и иметь возможность вставлять его в каждое приглашение для каждого файла.

0 голосов
/ 20 октября 2017

Как только вы установите ssh-keygen как объяснено здесь , вы можете сделать

scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

, где id_rsa - локальный ключ, сгенерированный в настройке ssh-keygen.

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

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

Затем из вашего терминала выполните source ~/.bash_profile. После этого, если вы наберете remote_scp в своем терминале, он должен запустить команду scp без пароля.

0 голосов
/ 14 октября 2015

Как уже многие говорили, использование ssh-ключей было бы самым безопасным и лучшим способом. Если кто-то еще все еще интересуется поиском помощи, в справке Ubuntu есть быстрый и простой способ использования ключей ssh.

0 голосов
/ 23 сентября 2009

Вы не говорите, какую платформу вы используете дома и в школе. Предполагая Linux, Cygwin или OS / X, у вас есть несколько вариантов:

  1. Аутентификация с открытым ключом, если она не был выключен на сервере
  2. ssh-agent и ssh-add для ввода пароля один раз за сеанс

Для варианта (1) вы бы

  1. создать пару ключей дома, используя ssh-keygen, без ключевой фразы закрытый ключ. Обратите внимание, что пропуск парольной фразы, вероятно, не является хорошей идеей, если другие люди используют тот же компьютер, но ваша цель заключалась в том, чтобы обойти необходимость ввода пароля.
  2. загрузите ключ PUBLIC в свою школу аккаунт и поместите его в ~ / .Ssh / authorized_keys
  3. Использовать scp с "-i identityfile" вариант, где идентификационный файл является полный путь к вашему личному ключу. Или добавьте запись в .ssh / config (см. Справочные страницы)

Для второго варианта ssh-agent позволяет вам кэшировать ваш пароль в локальном процессе один раз за сеанс. Вы устанавливаете время истечения

...