Назад | Перейти на главную страницу

SSH - использование ключей работает, но не в скрипте

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

ручная команда ssh, которая работает, без запроса пароля, автоматический вход:

 ssh -p 1234 garfonzo@123.456.789.123

В скрипте Python:

rsync --ignore-existing --delete --stats --progress -rp -e "ssh -p 1234" garfonzo@123.456.789.123:/directory/ /other/directory/

Что дает?

(очевидно, данные ssh поддельные)

ИЗМЕНИТЬ по запросу

@Zoredache - ставлю -vv в скрипте (и -i, чтобы указать, где находится ключ, что фактически приблизило меня на один шаг), и он показал интересную группу строк:

debug1: Host '[123.456.789.123]:1234' is known and matches the RSA host key.
debug1: Found key in /root/.ssh/known_hosts:1
debug2: bits set: 515/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/garfonzo/.ssh/id_dsa.pub (0x7f125c489bd0)
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/garfonzo/.ssh/id_dsa.pub
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-dss blen 434
debug2: input_userauth_pk_ok: fp 81:02:20:f0:62:16:30:15:4d:0b:2e:91:7c:ba:5c:05
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key '/home/garfonzo/.ssh/id_dsa.pub':
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
debug1: Next authentication method: password

Кажется, что он не знает, где хранится мой ключ на стороне клиента (возможно, проблема раньше), он запрашивает кодовую фразу. Проблема в том, что я не указал кодовую фразу, оставил поле пустым. Странно ... Может, новый набор ключей создам?

РЕДАКТИРОВАТЬ 2

@ckliborn - отличная идея! Я думаю, это могло показать, в чем моя проблема. Единственная строка, которая, как мне кажется, указывает на мою проблему, такова:

debug1: Found key in /home/garfonzo/.ssh/known_hosts:1

тогда как при запуске через скрипт та же строка выглядит так:

debug1: Found key in /root/.ssh/known_hosts:1

Итак, клиент ищет ключ не в том месте. Когда я указываю местоположение ключа, он запрашивает парольную фразу, которую я не установил. Арг!

?Смущенный?

В сценарии python вы пытались явно указать местоположение файла идентификации, который вы хотите использовать, с флагом «-i»?

Пример:

rsync --ignore-existing --delete --stats --progress -rp -e "ssh -i /home/user/.ssh/keyfile -p 1234" garfonzo@123.456.789

Попробуйте добавить новый хост в ваш файл ~ / .ssh / config, не забудьте внести изменения:

Host somehostname 
Hostname 169.1.1.254
User garfonzo
IdentityFile /home/garfonzo/.ssh/id_rsa
PubkeyAuthentication yes

Если у вашего ключа есть кодовая фраза, а она должна быть, вам необходимо получить ~ / ssh-agent.

http://www.ibm.com/developerworks/library/l-keyc2/

Если вы пропустили парольную фразу для своего ключа, следуйте приведенному выше адиву и передайте аргумент «-i».

Ваш скрипт python работает с #!/usr/bin/env python или ты просто делаешь прямую #!/usr/bin/python или похожие. Кроме того, вы можете попробовать удалить -e "ssh -p 1234" и просто используя --port 1234 вместо.

Проверьте своего пользователя ... Похоже, что сценарий запускается от имени пользователя root, а тестирование выполняется от имени пользователя. Ты используешь su или sudo или вы входите в систему как root? Как запускается ваш сценарий? Есть ли у него какие-то права root?