SSH keys (Српски)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Tango-preferences-desktop-locale-modified.pngThe translation of this article or section does not reflect the original text.Tango-preferences-desktop-locale-modified.png

Reason: Last updated in 2011 (Discuss in Talk:SSH keys (Српски))

Шта су SSH кључеви?

Коришћењем SSH кључева (прецизније јавних и приватних), лако се може повезати на сервер, или на више сервера, без потребе да се уноси шифра за сваки сервер.

Генерисање SSH кључева

Ако OpenSSH није инсталиран, потребно га је инсталирати.

# pacman -S openssh

Кључеви се могу генерисати покретањем the ssh-keygen команде као регуларни корисник:

$ ssh-keygen -b 1024 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/mith/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mith/.ssh/id_dsa.
Your public key has been saved in /home/mith/.ssh/id_dsa.pub.
The key fingerprint is:
x6:68:xx:93:98:8x:87:95:7x:2x:4x:x9:81:xx:56:94 mith@middleearth

То ће питати за локацију (коју треба оставити као што јесте), али лозинка је важна! Познато је који су критеријуми за добру лозинку.

Шта смо сад урадили? Генерисали смо 1024 бита дугачак (-b 1024) public/private dsa (-t dsa) пар кључева коришћењем ssh-keygen команде.

За прављење RSA парова кључева уместо DSA потребно је користити -t rsa (не треба наводити дужину кључа "-b" јер је подразумевана дужина за RSA 2048 и то је сасвим довољно).

Note: DSA кључ мора да буде тачно 1024 бита дугачак. RSA кључ може да варира између 768 и 4096 бита.

Копирање кључева на удаљени сервер

Пошто су кључеви генерисани морају се копирати на удаљени сервер. За OpenSSH, јавни кључ се мора налазити у ~/.ssh/authorized_keys.

$ scp ~/.ssh/id_dsa.pub mith@metawire.org:

Ово копира јавни кључ (id_dsa.pub) на удаљени сервер преко scp (обратите пажњу на : на крају адресе сервера). Фајл ће се ископирати у home директоријум, али може се навести и нека друга адреса ако је то потребно.

Следеће, на удаљеном серверу, неопходно је креирати ~/.ssh директоријум и додати фајл са кључевима authorized_keys :

$ ssh mith@metawire.org
mith@metawire.org's password:
$ mkdir ~/.ssh
$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_dsa.pub
$ chmod 600 ~/.ssh/authorized_keys

Последње две команде уклањају јавни кључ са сервера (који више није потребан), и подешава исправне дозволе на authorized_keys фајлу.

Ако се дисконектујемо са сервера, и покушамо да се поново повежемо, бићемо упитани за лозинку кључа:

$ ssh mith@metawire.org
Enter passphrase for key '/home/mith/.ssh/id_dsa':

Ако не можете да се пријавите са кључем, два пута проверите дозволе на authorized_keys фајлу.

Такође проверите дозволе на ~/.ssh директоријуму, који би требало да има дозволе писања искључене за групе и друге. Следећа команда искљулује дозволе за групе и друге за ~/.ssh директоријум:

$ chmod go-w ~/.ssh

Памћење лозинки кључева

Сада се можемо пријавити на сервер коришћењем кључа уместо шифре, али како је лакше, јер је и даље потребно унети лозинку кључа? Одговор је коришћење SSH агента, програм који памти лозинке за кључеве! Постоји више различитих алата који су доступни, па је потребно пронаћи онај који вама највише одговара..

ssh-agent

ssh-agent је основни агент који долази уз OpenSSH.

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2148; export SSH_AGENT_PID;
echo Agent pid 2148;

Када се покрене ssh-agent, појавиће се променљиве које могу да се користе. Да би искористили те променљиве, потребно је покренути команду кроз eval команду.

$ eval `ssh-agent`
Agent pid 2157

Ово се може додати у /etc/profile да би се покретало сваки пут кад се отвори сесија:

# echo 'eval `ssh-agent`' >> /etc/profile

Обратите пажњу на исправне наводнике!

Сад кад је ssh-agent покренут, морамо да му кажемо да имамо приватне кључеве и где се налазе.

$ ssh-add ~/.ssh/id_dsa
Enter passphrase for /home/user/.ssh/id_dsa:
Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)

Упитани смо за лозинку, унели смо је, и то је то. Сад се можемо пријавити на удаљени сервер без потребе да уносимо шифру.

Једина лоша страна ssh-agent је потреба за креирањем нове конзоле (shell), то значи да морамо да покренемо ssh-add сваки пут за сваку конзолу. Постоји радно окружење за то тј. скрипта која се зове keychain која ће бити покривена у следећем одељку.

Коришћење GnuPG агента

GnuPG агент, се дистрибуира са gnupg2[broken link: package not found] пакетом, има OpenSSH емулацију агента. Ако користите GPG можете узети у обзир овог агента да брине о свим вашим кључевима. У супротном можда желите PIN дијалог који пружа управљање лозинкама, који се разликује од ланца кључева.

Да би почели са коришћењем GPG агента за SSH кључеве потребно је прво покренути gpg-agent са --enable-ssh-support опцијом. Пример (не заборавите да учините фајл извршивим):

/etc/profile.d/gpg-agent.sh
#!/bin/sh

# Start the GnuPG agent and enable OpenSSH agent emulation
gnupginf="${HOME}/.gnupg/gpg-agent.info"

if pgrep -u "${USER}" gpg-agent >/dev/null 2>&1; then
    eval `cat $gnupginf`
    eval `cut -d= -f1 $gnupginf | xargs echo export`
else
    eval `gpg-agent --enable-ssh-support --daemon`
fi

Кад је gpg-agent покренут може се користити ssh-add за одобравање кључева, као што би радили са обичним ssh-agent. Листа одобрених кључева се чува у ~/.gnupg/sshcontrol фајлу. Једном кад је кључ одобрен добићете дијалог PIN уноса сваки пут кад је лозинка потребна. Кеширање лозинки се контролише у ~/.gnupg/gpg-agent.conf фајлу. Следећи пример показује како gpg-agent кешира кључеве на 3 сата:

 # Cache settings
 default-cache-ttl 10800
 default-cache-ttl-ssh 10800

Друга корисна подешавања овог фајла укључују програм за унос PIN-а (GTK, QT или ncurses верзија), итд...:

 # Environment file
 write-env-file /home/username/.gnupg/gpg-agent.info
 
 # Keyboard control
 #no-grab
   
 # PIN entry program
 #pinentry-program /usr/bin/pinentry-curses
 #pinentry-program /usr/bin/pinentry-qt4
 pinentry-program /usr/bin/pinentry-gtk-2

Коришћење keychain програма

Keychain[dead link 2021-11-19 ⓘ] управља једним или више дефинисаних приватних кључева. Кад се покрене тражиће лозинку за приватне кључеве и сачуваће их. На тај начин су приватни кључеви заштићени лозинком.

Keychain се инсталира из репозиторијума extra:

# pacman -S keychain

Потребно је креирати следећи фаји и учинити га извршним:

/etc/profile.d/keychain.sh
eval `keychain --eval --nogui -Q -q id_rsa`

или

/etc/profile.d/keychain.sh
/usr/bin/keychain -Q -q --nogui ~/.ssh/id_dsa
[[ -f $HOME/.keychain/$HOSTNAME-sh ]] && source $HOME/.keychain/$HOSTNAME-sh

или

Додати

eval `keychain --eval --agents ssh id_dsa`

у .bashrc или .bash_profile.

Tip: Ако желите већу сигурност треба заменити -Q са --clear али ће бити мање погодно.

Ако је потребно, замените ~/.ssh/id_dsa са ~/.ssh/id_rsa. За оне који не користе non-Bash компатибилну љуску, погледати keychain --help или keychain(1) за детаље о другим љускама.

Затворите љуску и отворите је опет. Keychain би требало да се подигне и ако је то први пут да се поркеће тражиће лозинку за спецификовани приватни кључ.

Коришћење ssh-agent и x11-ssh-askpass

Потребно је да се ssh-agent покрене сваки пут кад се покрене и нови Xsession. ssh-agent ће се затворити кад се X сесија заврши.

Инсталирајте различите x11-ssh-askpass који ће тражити лозинку сваки пут кад се покрене нови Xsession. Или користите оригинални x11-ssh-askpass из AUR или ksshaskpass (користи kdelibs):

# pacman -S ksshaskpass

или openssh-askpass (користи qt):

# pacman -S openssh-askpass

После инсталирања ових програма, затварање Xsession и при поновном пријављивању ћете бити упитани за лозинку.

GNOME Keyring

Ако користите GNOME десктоп, Gnome Keyring алат се може користити као SSH агент. Посетите Gnome Keyring чланак.

Решавање проблема

Ако SSH сервер игнорише кључеве, постарајте се да имате правилно подешене дозволе на свим битним фајловима.

За локалну машину:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa

За удаљену машину:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

У супротном, покрените sshd у debug режиму и посматрајте излаз команде док се повезујете:

# /usr/sbin/sshd -d

Корисни линкови / Информације