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 и то је сасвим довољно).
Копирање кључева на удаљени сервер
Пошто су кључеви генерисани морају се копирати на удаљени сервер. За 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
.
Ако је потребно, замените ~/.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