Как SSH к localhost без пароля?

17

РЕДАКТИРОВАТЬ: положить именно то, что было сделано.

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

user@PC:~$ rm -rf .ssh/*
user@PC:~$ ssh-keygen -t rsa > /dev/null 
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
user@PC:~$ ls .ssh/
id_rsa  id_rsa.pub
user@PC:~$ ssh-copy-id -i localhost 
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is f7:87:b5:4e:31:a1:72:11:8e:5f:d2:61:bd:b3:40:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
user@localhost's password: 
Now try logging into the machine, with "ssh 'localhost'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

user@PC:~$ ssh-agent $SHELL
user@PC:~$ ssh-add -L
The agent has no identities.
user@PC:~$ ssh-add 
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
user@PC:~$ ssh-add -L
ssh-rsa ...MY KEY HERE

user@PC:~$ ssh-copy-id -i localhost 
user@localhost's password: 
Now try logging into the machine, with "ssh 'localhost'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

user@PC:~$ ssh localhost echo 'testing'
user@localhost's password: 

user@PC:~$ 

Итак, как вы можете видеть в последней команде, она все еще спрашивает пароль !!! Как я могу это исправить ?? Ubuntu-10.04, OpenSSH_5.3p1

EDIT2:

Добавление некоторой информации о sshd

user@PC:~$ cat /etc/ssh/sshd_config | grep Authentication
# Authentication:
RSAAuthentication yes
PubkeyAuthentication yes
RhostsRSAAuthentication no
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
ChallengeResponseAuthentication no
# PasswordAuthentication yes
#KerberosAuthentication no
#GSSAPIAuthentication no
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.

РЕДАКТИРОВАТЬ 3: результат Ading от $ ssh -vv localhost

$ssh -vv localhost
...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/identity
debug1: Offering public key: /home/user/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
user@localhost's password: 

EDIT4:

Просто проверяю, совпадают ли файлы, и md5sum согласен

Canesin
источник
Есть ли у вас RSAAuthentication yesи PubkeyAuthentication yesв вашем / etc / ssh / sshd_config? Что показывает ssh -vv localhost? Я только что попробовал это на коробке 10.04, и у меня не было проблем ..
Doon
Hy Doon, действительно .. У меня есть оба к да .. Я добавил вывод ssh -vv в вопросе.
Canesin
Зачем вам SSH к localhost, если у вас уже есть доступ?
Вторник
Программное обеспечение параллельной обработки использует локальный ssh ​​/ rsh
Canesin
Пожалуйста, не размещайте ответ в вопросе и не ставьте «решено» в заголовке. Вы правильно сделали, предоставив ответ. Как только вы примете ответ, система покажет, что проблема решена.
ChrisF

Ответы:

10

Прежде всего, вы должны понимать, что вы делаете:

user@PC:~$ cat .ssh/id_rsa.pub | ssh localhost 'cat >> .ssh/authorized_keys'

Вы копируете открытый ключ .ssh/id_rsa.pubчерез ssh на тот же хост (то есть локальный хост, тот же хост). Если вы замените его localhostдругим хостом, это будет иметь больше смысла (но если вы пытаетесь это сделать, чтобы узнать, как это сделать, это нормально).

Как только у вас есть копия вашего открытого ключа на удаленном хосте (или тот же, на котором вы находитесь), вы должны убедиться, что используете его для аутентификации, на вашем реальном хосте, вызывая ssh-agent/ ssh-add:

$ eval `ssh-agent`
$ ssh-add

Затем, если вы предоставили ключевую фразу, вам будет предложено ввести ее после ssh-add. Если вы сгенерировали закрытый ключ без ключевой фразы, то это все.

Torian
источник
Да, я понимаю команды, я просто изложил это так, чтобы было ясно, что я делал обычные вещи с помощью клавиш. Я сделал ssh-add ... он не спрашивает парольную фразу (поскольку я не использовал ни одного при создании) ... но снова, делая, $ ssh localhost ls, он запрашивает пароль
Canesin
Так что, если вы выполнили ssh-add, пожалуйста, отредактируйте ваш вопрос и поставьте все, что вы сделали Чем больше информации вы дадите, тем лучше и быстрее ответ.
Ториан
Извините за это, исправил сейчас .. Я добавил терминал, сделал все снова, чтобы вставить здесь ..
Canesin
Спасибо миллион раз! Кстати, почему " eval"?
IProblemFactory
3

Обнаружили проблему.

Запуск сервера с отладкой:

$sshd -Dd

Я обнаружил, что не смог прочитать auth_key

$chmod 750 $HOME

Починил это.

Canesin
источник
Каковы были предыдущие флаги файла?
bbaja42
2

Сделайте следующие шаги

ssh-keygen -t rsa -C "your_email@example.com"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.

Используйте файл по умолчанию и пустую фразу-пароль (просто нажмите Enter в следующих 2 шагах)

# start the ssh-agent in the background
eval "$(ssh-agent -s)"
# Agent pid 59566
ssh-add 

Скопируйте содержимое ~ / .ssh / id_rsa.pub в ~ / .ssh / authorized_keys

Убедитесь, что следующие разрешения

 ls -l .ssh/
 total 20
-rw-r--r--. 1 swati swati  399 May  5 14:53 authorized_keys
-rw-r--r--. 1 swati swati  761 Jan 12 15:59 config
-rw-------. 1 swati swati 1671 Jan 12 15:44 id_rsa
-rw-r--r--. 1 swati swati  399 Jan 12 15:44 id_rsa.pub
-rw-r--r--. 1 swati swati  410 Jan 12 15:46 known_hosts 

Кроме того, убедитесь, что разрешения для каталога .ssh. Это тоже важно

drwx------.   2 swati swati    4096 May  5 14:56 .ssh
swatisinghi
источник
1
Обеспечьте 750 разрешений для $ HOME
swatisinghi
На моей машине (Fedora 28) установка разрешения authorized_keysна 0600 решает проблему, в то время как разрешение .sshкаталога не влияет на sshing localhost
Чанг Цянь
1

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

Я думаю, что вам может потребоваться отключить аутентификацию на основе пароля. Это sshd_config я использую

Port 22
Protocol 2
PermitRootLogin no
StrictModes yes
PasswordAuthentication no
ChallengeResponseAuthentication no
MaxStartups 2
AllowUsers peter paul mary
LogLevel VERBOSE

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


Обновить:

Проверьте логи сервера

Из вашего EDIT3 я вижу, что аутентификация с открытым ключом завершается неудачей, прежде чем клиент попытается выполнить аутентификацию на основе пароля. Системный журнал вашего сервера может содержать некоторые сообщения от sshd, которые проливают некоторый свет на это.

Перезагрузить измененные конфиги

Не забудьте дать сигнал sshdперезагрузить любые изменения конфигурации. Напримерkill -HUP $(cat /etc/sshd.pid)

RedGrittyBrick
источник
Я думаю, что отключение аутентификации по паролю, когда он даже не может войти без пароля, было бы последним, что он хотел бы сделать (полностью
заблокировавшись
@Amalgovinus: Вопрос был отредактирован с тех пор, как я опубликовал свой первоначальный ответ. Я полагаю, я мог бы удалить этот ответ.
RedGrittyBrick
0

Относительно вышеупомянутого поста, столкнувшись с той же проблемой, я просто изменил строку

ПарольАутентификация нет

в файле / etc / ssh / sshd_config, и это сработало.

Более того, возможно, лучше использовать

перезапуск службы sshd

перезагрузить изменения конфигурации sshd.

никола
источник
0

Другое решение для Red Hat Enterprise Linux 6.5 SELinux, не позволяющее sshd читать $ HOME / .ssh, - это использовать restorecon, см. Мой ответ здесь /superuser//a/764020/213743 .

buzz3791
источник
0

Для меня это было так просто, как

cat id_rsa.pub >> authorized_keys
user695025
источник
0

У меня была та же проблема, я сделал следующие 3 шага, чтобы создать пароль без логина, и он работает нормально

1. ssh-keygen -t rsa
Press enter for each line
2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. chmod og-wx ~/.ssh/authorized_keys
Хади Раджу
источник