Калиди SSH ҷуфти файлҳост: калиди хусусӣ, ки дар компютери шумо мемонад, ва калиди оммавӣ, ки шумо дар сервер мегузоред. Онро бо ssh-keygen -t ed25519 созед, калиди оммавиро ба сервер илова кунед ва шумо бе парол ва бо амнияти хеле беҳтар ворид мешавед.
Ин дастур Linux, macOS ва Windows-ро фаро мегирад, сипас ҷузъиётеро, ки истифодаи калидҳоро қулай мегардонанд.
Чаро калидҳо аз паролҳо беҳтаранд
Ҳар сервер дар интернет пайваста кӯшишҳои тахмини паролро дар порти 22 мебинад. Пароли қавӣ онҳоро суст мекунад; калид онҳоро қатъ мекунад, зеро чизе барои тахмин нест. Калидҳо инчунин автоматикунониро имконпазир мегардонанд: скриптҳо, абзорҳои ҷойгиркунӣ ва CI метавонанд бе нигоҳ доштани парол ворид шаванд.
1. Калид созед
Linux ва macOS
Терминалро кушоед ва иҷро кунед:
ssh-keygen -t ed25519 -C "laptop-2026"
-t ed25519намуди муосири калидро интихоб мекунад.-Cшарҳ илова мекунад, то баъдтар калидро шиносед. Агар махфиятро афзал донед, номи дастгоҳро истифода баред, на суроғаи почтаи электрониро.
Роҳи пешфарзро (~/.ssh/id_ed25519) қабул кунед ва ибораи махфӣ гузоред. Акнун шумо доред:
~/.ssh/id_ed25519 # калиди хусусӣ, ҳеҷ гоҳ ба касе надиҳед
~/.ssh/id_ed25519.pub # калиди оммавӣ, мубодилааш бехатар аст
Windows 10 ва 11
Windows бо OpenSSH меояд. PowerShell-ро кушоед ва ҳамон фармонро иҷро кунед:
ssh-keygen -t ed25519 -C "desktop-2026"
Файлҳо дар C:\Users\<you>\.ssh\ ҷойгир мешаванд. Агар PuTTY-ро истифода баред, метавонед калиди хусусиро ба PuTTYgen ворид кунед ва онро ҳамчун файли .ppk захира кунед.
2. Ба калиди оммавии худ нигаред
cat ~/.ssh/id_ed25519.pub
Ин як сатр аст, ки бо ssh-ed25519 оғоз мешавад. Маҳз ҳамин қисмро шумо ба серверҳо ва ба консол нусхабардорӣ мекунед.
3. Калидро дар сервер гузоред
Варианти A: ҳангоми сохтани сервер
Роҳи осонтарин. Дар консоли Wolkra калиди оммавиро дар бахши SSH keys илова кунед, сипас онро ҳангоми сохтани сервер интихоб кунед. Калид ҳангоми боршавии аввал ба ҳисоби root навишта мешавад ва ҳеҷ парол фиристода намешавад. Ба пайвастшавӣ бо SSH нигаред.
Варианти B: бо ssh-copy-id
Агар сервер аллакай мавҷуд бошад ва шумо бо парол ворид шуда тавонед:
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected] # example address
Варианти C: дастӣ
Дар Windows ё вақте ки ssh-copy-id дастрас нест, калидро ба authorized_keys-и сервер гузоред:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo 'ssh-ed25519 AAAA... laptop-2026' >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Иҷозатҳо муҳиманд. Агар ~/.ssh ё authorized_keys барои дигарон қобили навиштан бошад, OpenSSH файлро нодида мегирад.
4. Ворид шавед
Агар якчанд калид дошта бошед, калиди лозимиро нишон диҳед:
ssh -i ~/.ssh/id_ed25519 [email protected]
5. ssh-agent-ро истифода баред, то ибораи махфиро як бор ворид кунед
macOS
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Сипас ба ~/.ssh/config илова кунед:
Host *
AddKeysToAgent yes
UseKeychain yes
Linux
Аксари мизҳои корӣ агентро худкор оғоз мекунанд. Дар акси ҳол:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Windows
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519
6. Файли танзимоти SSH нависед
Файли танзимот фармонҳои дарозро ба номҳои кӯтоҳ табдил медиҳад. ~/.ssh/config-ро созед:
Host web
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/id_ed25519
Host db
HostName 10.0.0.5
User deploy
ProxyJump web
Акнун ssh web ба сервери аввал пайваст мешавад ва ssh db тавассути web ба сервере дар шабакаи хусусӣ мерасад. Ҳамин тавр шумо серверҳоеро, ки IP-и оммавӣ надоранд, масалан дар шабакаи хусусӣ, идора мекунед. (Суроғаҳо намунавӣ мебошанд.)
7. Бо ҳамон калид файлҳоро нусхабардорӣ кунед
scp ва rsync ҳамон калидҳо ва танзимотро истифода мебаранд:
scp backup.tar.gz web:/home/deploy/
rsync -avz ./site/ web:/var/www/site/
8. Воридшавӣ бо паролро дар сервер хомӯш кунед
Вақте ки воридшавӣ бо калид кор мекунад, паролҳоро хомӯш кунед, то сервер танҳо калидҳоро қабул кунад:
sudo tee /etc/ssh/sshd_config.d/10-keys-only.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
EOF
sudo sshd -t && sudo systemctl reload ssh
Ҳангоми санҷиши сеанси нав сеанси мавҷударо кушода нигоҳ доред. prohibit-password ба root танҳо бо калид ворид шуданро иҷозат медиҳад; вақте ки аз корбари sudo кор мекунед, онро ба no гузоред. Маълумоти бештар дар муҳофизати сервери Ubuntu.
9. Калидҳоро иваз ва бекор кунед
Одатҳои хуб:
- Барои ҳар дастгоҳ як калид. Агар ноутбук гум шавад, танҳо ҳамон калидро нест кунед.
- Шарҳҳои маънодор.
laptop-2026-ро нисбат баuser@hostосонтар ёфтан мумкин аст. authorized_keys-ро гоҳ-гоҳ аз назар гузаронед ва калидҳоеро, ки касе истифода намебарад, нест кунед.
Барои бекор кардани калид сатри онро аз ~/.ssh/authorized_keys дар ҳар сервер нест кунед. Барои иваз кардан аввал калиди навро илова кунед, санҷед, сипас калиди кӯҳнаро нест кунед.
10. Ихтиёрӣ: калидҳои сахтафзорӣ
OpenSSH калидҳои амниятии FIDO2-ро дастгирӣ мекунад. Бо калиди мувофиқи пайвастшуда:
ssh-keygen -t ed25519-sk -C "yubikey"
Калиди хусусиро аз дастгоҳ нусхабардорӣ кардан мумкин нест ва ҳар воридшавӣ ламсро талаб мекунад. Ин қавитарин вариант барои ҳисобҳои администратор аст.
11. Калидҳои SSH-ро барои ҷойгиркунӣ ва CI истифода баред
Системаҳои худкор набояд калиди шахсии шуморо истифода баранд. Барои ҳар система калиди алоҳидаи бе ибораи махфӣ созед ва имкониятҳои онро дар сервер маҳдуд кунед:
ssh-keygen -t ed25519 -f ~/.ssh/deploy_ci -N "" -C "ci-deploy"
Дар сервер ба калид дар authorized_keys имконотеро илова кунед, ки онро маҳдуд мекунанд:
from="198.51.100.0/24",no-port-forwarding,no-agent-forwarding,no-pty ssh-ed25519 AAAA... ci-deploy
from=калидро танҳо аз диапазони додашуда қабул мекунад (дар ин ҷо намуна).no-ptyва имконоти forwarding истифодаи интерактивиро манъ мекунанд.command="..."метавонад як фармони мушаххасро, масалан скрипти ҷойгиркунӣ, ҳатмӣ гардонад.
Калиди хусусиро дар анбори сирҳои системаи CI-и худ нигоҳ доред, ҳеҷ гоҳ дар репозиторий. Агар системаи CI ягон вақт рахна шавад, нест кардани як сатр аз authorized_keys онро ҷудо мекунад.
12. Калиди хости серверро санҷед
Саволи изи ангушт (fingerprint) ҳангоми пайвасти аввал шуморо аз пайваст шудан ба мошини нодуруст ҳифз мекунад. Барои серверҳои муҳим онро бо изи воқеӣ муқоиса кунед. Дар консоли браузерии сервер иҷро кунед:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
Агар он бо он чи мизоҷи SSH-и шумо нишон дод, мувофиқат кунад, yes ҷавоб диҳед. Сипас изи ангушт дар ~/.ssh/known_hosts захира мешавад ва ҳангоми ҳар пайвасти минбаъда санҷида мешавад.
Ҳалли мушкилот
| Паём | Сабаби маъмул |
|---|---|
Permission denied (publickey) |
Корбари нодуруст, калиди нодуруст ё иҷозатҳои бад дар ~/.ssh |
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED |
Сервер аз нав сохта шуд ё IP дубора истифода шуд; сабти кӯҳнаро бо ssh-keygen -R 203.0.113.10 нест кунед |
| Бо вуҷуди ин парол пурсида мешавад | Калид пешниҳод нашуд; ssh -v-ро санҷед, то бинед кадом калидҳо озмуда мешаванд |
ssh -v user@host-ро барои логи муфассали он чи мизоҷ меозмояд, иҷро кунед. Агар дастрасии шумо ба сервери Wolkra пурра баста шуда бошад, консоли браузериро аз саҳифаи сервер кушоед ё ба реҷаи наҷот (rescue mode) бор кунед.
Минбаъд: қадамҳои аввал дар VPS-и нав-ро иҷро кунед.
Саволҳои маъмул
Кадом намуди калиди SSH-ро истифода барам?
Ed25519-ро истифода баред. Он кӯтоҳ, зуд ва бехатар аст ва ҳар версияи ҷории OpenSSH онро дастгирӣ мекунад. RSA-и 4096-битиро танҳо барои системаҳои хеле кӯҳна истифода баред.
Оё калиди SSH-и ман бояд ибораи махфӣ (passphrase) дошта бошад?
Бале. Ибораи махфӣ калиди хусусиро дар диск рамзгузорӣ мекунад, бинобар ин ноутбуки дуздидашуда ё нусхаи эҳтиётӣ ба серверҳои шумо дастрасӣ намедиҳад. Бо ssh-agent шумо онро дар ҳар сеанс як бор ворид мекунед.
Оё як калидро барои якчанд сервер истифода бурда метавонам?
Бале. Калиди оммавии шумо метавонад дар серверҳои зиёд бошад. Бисёриҳо барои ҳар дастгоҳ як калид истифода мебаранд, на барои ҳар сервер, то дастгоҳи гумшударо дар як ҷо бекор кунанд.
Агар калиди хусусии худро гум кунам, чӣ мешавад?
Бо роҳи дигар ворид шавед, масалан тавассути консоли браузерӣ, ва калиди оммавии кӯҳнаро аз ~/.ssh/authorized_keys нест кунед. Сипас калиди нав илова кунед.
Дар Wolkra калидро дар куҷо илова мекунам?
Дар бахши SSH keys дар консол. Калидҳои захирашударо ҳангоми сохтани сервер интихоб кардан мумкин аст ва онҳо ҳангоми боршавии аввал ба ҳисоби root навишта мешаванд.