SSH запрашивает пароль при вызове в скрипте

SSH запрашивает пароль при вызове в скрипте

У меня есть один главный и четыре подчиненных компьютера. Я сгенерировал открытый/закрытый ключ rsa на главном компьютере. Затем я скопировал publickey ( id_rsa.pub) на подчиненные машины как authorized_keys.

Пароль не запрашивается, когда я вызываю SSH на терминале главного ПК следующим образом:

ssh –o UserKnownHostsFile=/dev/null –o StrictHostKeyChecking=no hduser@slave1 

Я написал этот скрипт для автоматического входа на подчиненные машины без запроса пароля.

SERVER_LIST=`cat /home/hduser/slaves` # slave1, slave2 ...

for host in $SERVER_LIST; do
host=hduser@$host 
ssh –t –o UserKnownHostsFile=/dev/null –o StrictHostKeyChecking=no $host; 
done

SSH запрашивает пароли подчиненных устройств, когда я использую этот скрипт. Я получаю это сообщение, когда использую SSH с -vvопцией:

debug1: ssh_ecdsa_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: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /root/.ssh/id_rsa ((nil))
debug2: key: /root/.ssh/id_dsa ((nil))
debug2: key: /root/.ssh/id_ecdsa ((nil))
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug1: Trying private key: /root/.ssh/id_ecdsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
hduser@slave1's password:

Я изменил разрешения на главном и подчиненном ПК.

sudo chmod 755 /home/hduser    
sudo chmod 700 -R ~/.ssh
sudo chown hduser ~/.ssh

Он не запрашивает пароль, когда я вызываю SSH на терминале, но он все еще запрашивает пароль, когда я вызываю его в скрипте. Что я упускаю? Как это исправить?

решение1

Журналы SSH показывают, что сеанс входа ищет учетные данные в /root/.ssh/, что означает, что ваш скрипт запущен от имени пользователя root.

Либо скопируйте файлы id_* в /root/.ssh, сгенерируйте соответствующие учетные данные как пользователь root, либо запустите скрипт от имени пользователя, под которым сохранены учетные данные.

Связанный контент