# Помогите разобраться с ssh

## klop

Решил начать пользоваться ssh, вроде удобная штука  :Smile:  Поднял на сервере sshd, завел пользователя и все хорошо захожу использую пароль все работает прекрасно, но тут натолкнулся на статью "безопасность служб" на сайте gentoo. Там предлагается всю авторизацию делать через ключи откртый и закрытый, без ввода пароля. И все после этого не могу зайти на сервер хоть убей. Создал два ключа, секретный ключ на машину-клиент, паблик ключь в домашнюю директорию пользователя, которым логинюсь файл authorized_keys. И теперь получаю ошибку -  Host key verification failed. Посмотрел я получаю с сервера паблик ключ хоста, а не пользователя на которого логинюсь и как я понял в этом вся загвоздка, но вот как ее решить не знаю. 

Повторюсь, как мне кажется вся проблема в том, что хост выдает мне для авторизации ключ dsa, который он сам создает при первом запуске, а не тот ключь который прописан в authorized_keys из папки ~/.ssh/. Честно говоря уже и почитал все, что нашел не помогло, пользуюсь первый раз так что еще не понимаю до конца всего механизма работы.

----------

## Laitr Keiows

В чем проблема собственно?

На клиенте делаешь ssh-keygen, на сервер копируешь ~/.ssh/id_*.pub и добавляешь его содержимое в конец ~/.ssh/authorized_keys.

Теперь смотри что ты сделал по другому

----------

## klop

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

No DSA host key is known for 127.0.0.1 and you have requested strict checking.

Host key verification failed.

Причем тут хост я честно говоря не совсем понял.

Вот конфиг клиента:

Protocol 2

AddressFamily inet

ChallengeResponseAuthentication no

HostKeyAlgorithms ssh-dss

PreferredAuthentications publickey

#,password

RSAAuthentication no

ServerAliveInterval 60

StrictHostKeyChecking yes

IdentityFile /home/xxx/.ssh/id_dsa

Конфиг демона:

Port 22

Protocol 2

#AddressFamily any

ListenAddress 127.0.0.1

#ListenAddress ::

# HostKey for protocol version 1

#HostKey /etc/ssh/ssh_host_key

# HostKeys for protocol version 2

#HostKey /etc/ssh/ssh_host_rsa_key

#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key

#KeyRegenerationInterval 1h

#ServerKeyBits 768

# Logging

# obsoletes QuietMode and FascistLogging

SyslogFacility AUTHPRIV

LogLevel INFO

# Authentication:

#LoginGraceTime 2m

PermitRootLogin no

#StrictModes yes

#MaxAuthTries 6

#RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts

RhostsRSAAuthentication no

# similar for protocol version 2

HostbasedAuthentication no

# Change to yes if you don't trust ~/.ssh/known_hosts for

# RhostsRSAAuthentication and HostbasedAuthentication

IgnoreUserKnownHosts yes

# Don't read the user's ~/.rhosts and ~/.shosts files

IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!

PasswordAuthentication no

PermitEmptyPasswords no

# Change to no to disable s/key passwords

ChallengeResponseAuthentication no

# Kerberos options

#KerberosAuthentication no

#KerberosOrLocalPasswd yes

#KerberosTicketCleanup yes

#KerberosGetAFSToken no

# GSSAPI options

#GSSAPIAuthentication no

#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing,

# and session processing. If this is enabled, PAM authentication will

# be allowed through the ChallengeResponseAuthentication mechanism.

# Depending on your PAM configuration, this may bypass the setting of

# PasswordAuthentication, PermitEmptyPasswords, and

# "PermitRootLogin without-password". If you just want the PAM account and

# session checks to run without PAM authentication, then enable this but set

# ChallengeResponseAuthentication=no

UsePAM no

AllowTcpForwarding yes

GatewayPorts no

X11Forwarding yes

#X11DisplayOffset 10

X11UseLocalhost yes

PrintMotd no

#PrintLastLog yes

TCPKeepAlive yes

#UseLogin no

#UsePrivilegeSeparation yes

PermitUserEnvironment no

Compression yes

ClientAliveInterval 20

#ClientAliveCountMax 3

UseDNS yes

#PidFile /var/run/sshd.pid

#MaxStartups 10

#PermitTunnel no

# no default banner path

#Banner /some/path

# here are the new patched ldap related tokens

# entries in your LDAP must have posixAccount & ldapPublicKey objectclass

#UseLPK yes

#LpkLdapConf /etc/ldap.conf

#LpkServers  ldap://10.1.7.1 ldap://10.1.7.2

#LpkUserDN   ou=users,dc=phear,dc=org

#LpkGroupDN  ou=groups,dc=phear,dc=org

#LpkBindDN cn=Manager,dc=phear,dc=org

#LpkBindPw secret

#LpkServerGroup mail

#LpkForceTLS no

#LpkSearchTimelimit 3

#LpkBindTimelimit 3

# override default of no subsystems

Subsystem       sftp    /usr/lib/misc/sftp-server

AllowGroups whell

AllowUsers xxx@z0

RSAAuthentication no

SkeyAuthentication no

StrictModes yes

----------

## Laitr Keiows

Поставь в no:

StrictHostKeyChecking yes 

Может временно помочь. Рекомендую разобраться что в конфиге что означает и лишнее убрать.

----------

## klop

Сейчас уже все проверяю на локальной машине, пытаюсь зайти с lo. Даю команду ssh -l xxx 127.0.0.1

----------

## klop

Вначале в конфиг был 1-1, как в описанной выше статье, результат был несколько хуже при попытке соединить с ssh-сервером он постоянно давал ключ на авторизацию RSA а я использую DSA. 

И скажите мне пожалуйста почему он дает на авторизацию не мой открытый ключ (пользователя которого я прописываю), а свой хост_ключ_открытый?

----------

## klop

Вот что я получаю теперь после того как изменил StrictHostKeyChecking yes на no.

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.

DSA key fingerprint is 80:2e:46:21:4d:92:20:36:f7:18:ba:dc:88:f8:4e:ac.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '127.0.0.1' (DSA) to the list of known hosts.

Permission denied (publickey).

----------

## klop

Ну что я могу сказать все заработало, единственное не знаю почему. Удалили конфиг sshd на сервере и создал его снова полностью, как описанно в документе на сервере , удалили все в конфиге пользователя оставил только путь к ключу авторизации, какой использовать протокол. Вечером посижу почитаю может и пойму, где была ошибка.

----------

## ntrl

delete the remote ssh keys, as a regular user:

```
rm ~/.ssh/id_[rd]sa*

cat "" > ~/.ssh/authorized_keys
```

on the local host, as a regular user:

```
ssh-keygen -t dsa

ssh-copy-id -i ~/.ssh/id_dsa.pub remote_hostname_or_ip

ssh remote_hostname_or_ip
```

----------

