Wolkra

Дастурҳо

Чӣ тавр калидҳои SSH сохтан ва истифода бурдан

Чӣ тавр дар Linux, macOS ва Windows калидҳои SSH сохтан, онҳоро ба VPS илова кардан, ssh-agent ва файли танзимотро истифода бурдан ва калидҳоро бехатар иваз кардан. Қадамҳои равшан, фармонҳои воқеӣ.

Навсозӣ: 5 дақиқа хондан

Калиди SSH ҷуфти файлҳост: калиди хусусӣ, ки дар компютери шумо мемонад, ва калиди оммавӣ, ки шумо дар сервер мегузоред. Онро бо ssh-keygen -t ed25519 созед, калиди оммавиро ба сервер илова кунед ва шумо бе парол ва бо амнияти хеле беҳтар ворид мешавед.

Ин дастур Linux, macOS ва Windows-ро фаро мегирад, сипас ҷузъиётеро, ки истифодаи калидҳоро қулай мегардонанд.

Чаро калидҳо аз паролҳо беҳтаранд

Ҳар сервер дар интернет пайваста кӯшишҳои тахмини паролро дар порти 22 мебинад. Пароли қавӣ онҳоро суст мекунад; калид онҳоро қатъ мекунад, зеро чизе барои тахмин нест. Калидҳо инчунин автоматикунониро имконпазир мегардонанд: скриптҳо, абзорҳои ҷойгиркунӣ ва CI метавонанд бе нигоҳ доштани парол ворид шаванд.

1. Калид созед

Linux ва macOS

Терминалро кушоед ва иҷро кунед:

bash
ssh-keygen -t ed25519 -C "laptop-2026"
  • -t ed25519 намуди муосири калидро интихоб мекунад.
  • -C шарҳ илова мекунад, то баъдтар калидро шиносед. Агар махфиятро афзал донед, номи дастгоҳро истифода баред, на суроғаи почтаи электрониро.

Роҳи пешфарзро (~/.ssh/id_ed25519) қабул кунед ва ибораи махфӣ гузоред. Акнун шумо доред:

text
~/.ssh/id_ed25519       # калиди хусусӣ, ҳеҷ гоҳ ба касе надиҳед
~/.ssh/id_ed25519.pub   # калиди оммавӣ, мубодилааш бехатар аст

Windows 10 ва 11

Windows бо OpenSSH меояд. PowerShell-ро кушоед ва ҳамон фармонро иҷро кунед:

powershell
ssh-keygen -t ed25519 -C "desktop-2026"

Файлҳо дар C:\Users\<you>\.ssh\ ҷойгир мешаванд. Агар PuTTY-ро истифода баред, метавонед калиди хусусиро ба PuTTYgen ворид кунед ва онро ҳамчун файли .ppk захира кунед.

2. Ба калиди оммавии худ нигаред

bash
cat ~/.ssh/id_ed25519.pub

Ин як сатр аст, ки бо ssh-ed25519 оғоз мешавад. Маҳз ҳамин қисмро шумо ба серверҳо ва ба консол нусхабардорӣ мекунед.

3. Калидро дар сервер гузоред

Варианти A: ҳангоми сохтани сервер

Роҳи осонтарин. Дар консоли Wolkra калиди оммавиро дар бахши SSH keys илова кунед, сипас онро ҳангоми сохтани сервер интихоб кунед. Калид ҳангоми боршавии аввал ба ҳисоби root навишта мешавад ва ҳеҷ парол фиристода намешавад. Ба пайвастшавӣ бо SSH нигаред.

Варианти B: бо ssh-copy-id

Агар сервер аллакай мавҷуд бошад ва шумо бо парол ворид шуда тавонед:

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]   # example address

Варианти C: дастӣ

Дар Windows ё вақте ки ssh-copy-id дастрас нест, калидро ба authorized_keys-и сервер гузоред:

bash
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. Ворид шавед

Агар якчанд калид дошта бошед, калиди лозимиро нишон диҳед:

bash
ssh -i ~/.ssh/id_ed25519 [email protected]

5. ssh-agent-ро истифода баред, то ибораи махфиро як бор ворид кунед

macOS

bash
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Сипас ба ~/.ssh/config илова кунед:

text
Host *
  AddKeysToAgent yes
  UseKeychain yes

Linux

Аксари мизҳои корӣ агентро худкор оғоз мекунанд. Дар акси ҳол:

bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Windows

powershell
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519

6. Файли танзимоти SSH нависед

Файли танзимот фармонҳои дарозро ба номҳои кӯтоҳ табдил медиҳад. ~/.ssh/config-ро созед:

text
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 ҳамон калидҳо ва танзимотро истифода мебаранд:

bash
scp backup.tar.gz web:/home/deploy/
rsync -avz ./site/ web:/var/www/site/

8. Воридшавӣ бо паролро дар сервер хомӯш кунед

Вақте ки воридшавӣ бо калид кор мекунад, паролҳоро хомӯш кунед, то сервер танҳо калидҳоро қабул кунад:

bash
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-ро дастгирӣ мекунад. Бо калиди мувофиқи пайвастшуда:

bash
ssh-keygen -t ed25519-sk -C "yubikey"

Калиди хусусиро аз дастгоҳ нусхабардорӣ кардан мумкин нест ва ҳар воридшавӣ ламсро талаб мекунад. Ин қавитарин вариант барои ҳисобҳои администратор аст.

11. Калидҳои SSH-ро барои ҷойгиркунӣ ва CI истифода баред

Системаҳои худкор набояд калиди шахсии шуморо истифода баранд. Барои ҳар система калиди алоҳидаи бе ибораи махфӣ созед ва имкониятҳои онро дар сервер маҳдуд кунед:

bash
ssh-keygen -t ed25519 -f ~/.ssh/deploy_ci -N "" -C "ci-deploy"

Дар сервер ба калид дар authorized_keys имконотеро илова кунед, ки онро маҳдуд мекунанд:

text
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) ҳангоми пайвасти аввал шуморо аз пайваст шудан ба мошини нодуруст ҳифз мекунад. Барои серверҳои муҳим онро бо изи воқеӣ муқоиса кунед. Дар консоли браузерии сервер иҷро кунед:

bash
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 навишта мешаванд.

Сервер дар Франкфурт оғоз кунед

Ҳисоб созед, тавозунро пур кунед ва серверро аз €3.49 дар як моҳ иҷро кунед, танҳо барои соатҳое, ки истифода мебаред, пардохт карда. Трафики ҳисобнашаванда дар ҳар тариф.