Вообщем хочу сделать без парольный вход на сервер, генерю 2 ключа:
публичный ложу на сервер а секретный оставляю у клиента, на директории .ssh ставлю права 700 а на файлы ключей ставлю права 600.
на сервере в sshd_config
Давайте убедимся, что говорим об одних и тех же файлах:
— допустим командой
text
ssh-keygen -t rsa
вы создали пару ключей — id_rsa (приватный) и id_rsa.pub (публичный), по умолчанию, оба ключа записываются в пользовательский каталог ~/.ssh. Если вы оставите парольную фразу пустой, SSH не потребует дополнительной идентификации пользователя при входе в систему.
— командой
text
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
скопируйте публичный ключ на удалённый компьютер в домашний каталог пользователя, к которому будете в дальнейшем подключаться. Использование ssh-copy-id гарантирует, что публичный ключ получит правильные права доступа на удаленном хосте, но ничто не мешает сделать это вручную, но тогда публичный ключ на удалённом компьютере нужно переименовать вручную в ~/.ssh/authorized_keys (в соответствии с настройками, указанными в /etc/ssh/sshd_config на удалённом компьютере).
— создаю пару ключей на локальном компьютере:
[console]
gentoo-laptop ~ # ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
cd:28:90:ea:66:21:ee:1b:95:e3:06:ff:fc:21:17:e5 root@gentoo-laptop
The key's randomart image is:
+--[ RSA 2048]----+
| |
| . |
| o . |
| ... o+ |
|..o+ ..SEo |
|.o=.. .. |
| o++ . o |
|.oo o o . |
| o. o.. |
+-----------------+
[/console]
[console]
gentoo-laptop ~ # ls -l /root/.ssh
итого 8
-rw------- 1 root root 1679 Июл 25 09:48 id_rsa
-rw-r--r-- 1 root root 400 Июл 25 09:48 id_rsa.pub
[/console]
— копирую ключ на удалённый компьютер:
[console]
gentoo-laptop ~ # ssh-copy-id -i /root/.ssh/id_rsa.pub lupo@gentoo-home
The authenticity of host 'gentoo-home (192.168.1.110)' can't be established.
ECDSA key fingerprint is 90:12:86:28:53:96:90:66:d7:eb:01:b9:f2:a7:cd:37.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gentoo-home,192.168.1.110' (ECDSA) to the list of known hosts.
Password:
Now try logging into the machine, with "ssh 'lupo@gentoo-home'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
[/console]
[console]
lupo@gentoo-home ~ % ls -l ~/.ssh
итого 4
-rw------- 1 lupo lupo 400 июля 25 09:50 authorized_keys
[/console] Внимание: в данном случае нужно будет ввести сначала yes, разрешая подключение, а затем пароль удалённого пользователя.
— проверяем подключение
[console]
gentoo-laptop ~ # ssh 'lupo@gentoo-home'
Last login: Wed Jul 25 09:50:04 FET 2012 from gentoo-laptop.ha0s.net on ssh
lupo@gentoo-home ~ %
[/console]
Ну, или воспроизводя вашу ситуацию:
[console]
gentoo-laptop ~ # mv /root/.ssh/id_rsa /tmp/lupo.key
gentoo-laptop ~ # ssh -i /tmp/lupo.key lupo@gentoo-home
Last login: Wed Jul 25 09:54:23 FET 2012 from gentoo-laptop.ha0s.net on pts/1
lupo@gentoo-home ~ %
[/console]
да совершено верно я так и делаю. только на удаленный компьютер копирую с помощью scp. Потом переименовую и потом устанавливаю вручную права. Прост у меня нет команды ssh-copy-id к сожалению. И да я указываю при подключении путь к файлу с помощью ключа -i.
# Shell script to install your public key on a remote machine
# Takes the remote machine name as an argument.
# Obviously, the remote machine must accept password authentication,
# or one of the other keys in your ssh-agent, for this to work.
ID_FILE="${HOME}/.ssh/id_rsa.pub"
if [ "-i" = "$1" ]; then
shift
# check if we have 2 parameters left, if so the first is the new ID file
if [ -n "$2" ]; then
if expr "$1" : ".*\.pub" > /dev/null ; then
ID_FILE="$1"
else
ID_FILE="$1.pub"
fi
shift # and this should leave $1 as the target name
fi
else
if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then
GET_ID="$GET_ID ssh-add -L"
fi
fi
if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ] ; then
GET_ID="cat \"${ID_FILE}\""
fi
if [ -z "`eval $GET_ID`" ]; then
echo "$0: ERROR: No identities found" >&2
exit 1
fi
if [ "$#" -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
echo "Usage: $0 [-i [identity_file]] [user@]machine" >&2
exit 1
fi
# strip any trailing colon
host=`echo $1 | sed 's/:$//'`
cat <<EOF
Now try logging into the machine, with "ssh '$host'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
EOF
Убедитесь, что на удалённый(!) компьютер в каталог .ssh/ в домашнем(!) каталоге пользователя, к которому вы будуте подключаться(!), скопирован публичный(!) ключ и переименован в authorized_keys. Точнее, в этот файл дописываются все публичные ключи.