Ответ 1
Не разрешены ли ключи ssh? Это было бы лучшим решением.
Прежде всего, мне хорошо известно, что в этой теме много вопросов. Я прочитал их, но все же могу найти подходящий ответ для моей ситуации.
Я хотел бы scp
весь каталог ~/cs###/assign1
из локального в домашнюю директорию школы с оболочкой script. Мой вопрос в том, есть ли способ в моем script ожидать приглашения пароля, а затем имитировать событие на клавиатуре, чтобы "ввести" в мой пароль?
здесь - это действительно подробное руководство по настройке ключа
Не разрешены ли ключи ssh? Это было бы лучшим решением.
Используйте "sshpass"!
#!/bin/bash
sshpass -p "password" scp -r /some/local/path [email protected]:/some/remote/path
Рассмотрите возможность использования ключей или внешней библиотеки.
Я не думаю, что это возможно в противном случае (я надеюсь, что я не ошибаюсь), поскольку он налагает автоматическое вторжение в грубую силу и обнюхивание паролей.
Существуют библиотеки, которые могут делать то, что вы хотите (используйте SFTP-протокол, а не вызывающий scp), например libssh.
Опять же, я настоятельно рекомендую ключи.
Я не думаю, что вы можете легко это сделать. Вместо этого вы можете использовать аутентификацию с открытым ключом.
Что-то в этом направлении
ssh-keygen -t rsa
ssh school mkdir .ssh/
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys"
(или dsa
).
Но эй, это не serverfault, не так ли?; -)
Что-то вроде этого - http://code.google.com/p/enchanter/?
Я согласен, что вы должны использовать ключи. Но expect может автоматизировать интерактивный аспект процесса, если вы хотите жестко указать свой пароль в текстовом файле script.
Если вы можете смонтировать каталог с компьютера Windows (например, через AFS, NFS или SMB, которые были выполнены в моих лабораториях в университете Windows), вы можете использовать pscp с помощью переключателя -pw.
Вы не говорите, какую платформу вы используете дома и в школе. Предполагая, что Linux, Cygwin или OS/X у вас есть несколько вариантов:
Для опции (1) вы бы
Для второго варианта ssh-agent позволяет кэшировать ваш пароль в локальном процессе один раз за сеанс. Вы устанавливаете время истечения срока действия
Как уже многие говорили, использование ключей ssh будет самым безопасным и лучшим способом. Если кто-то еще интересуется и ищет помощь, в справке Ubuntu есть быстрый и прямой способ для использования ssh-ключей.
После настройки ssh-keygen
, как описано здесь, вы можете сделать
scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/
где id_rsa
- это локальный ключ, сгенерированный в настройке ssh-keygen
.
Если вы хотите уменьшить время ввода, вы можете изменить свой файл .bash_profile
и поместить
alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/
Затем с вашего терминала сделайте source ~/.bash_profile
. Впоследствии, если вы наберете remote_scp
в своем терминале, он должен запустить команду scp
без пароля.
Почему бы просто не использовать параметр "-r", чтобы скопировать его рекурсивно? Или вместо этого используйте rsync?
Вы также можете использовать аутентификацию с открытым ключом, которая не требует помощи на их конце, если у вас есть фактическая учетная запись пользователя. См. this