FreeBSD гарын авлага
Өмнөх | Бүлэг 15. Аюулгүй байдал | Дараах

# 15.10. OpenSSH

Хувь нэмэр болгон оруулсан Шерн Ли.

OpenSSH нь алсын машинуудад аюулгүйгээр хандах сүлжээний холболтын хэрэгслүүдийн олонлог юм. `rlogin`, `rsh`, `rcp`, болон `telnet`-ийг энэ програмаар шууд орлуулан ашиглаж болно. Мөн TCP/IP холболтууд аюулгүйгээр SSH-ээр туннель хийгдэж/дамжуулагдаж болдог. OpenSSH нь сэм чагналт, холболт булаан авалт, болон бусад сүлжээний түвшний халдлагуудыг үр дүнтэйгээр устгаж бүх трафикийг шифрлэдэг.

OpenSSH-г OpenBSD төсөл дэмжиж байдаг бөгөөд бүх сүүлийн үеийн алдааны засварууд болон шинэчлэлтүүд бүхий SSH v1.2.12 дээр тулгуурласан байдаг. Энэ програм нь SSH протокол 1 болон 2-той хоёулантай нь нийцтэй.

## 15.10.1. OpenSSH-ийг ашиглах давуу тал

telnet(1) эсвэл rlogin(1) ашиглаж байх үед сүлжээгээр илгээгдэж байгаа өгөгдөл цэвэр, шифрлэгдээгүй хэлбэрээр байдаг. Сүлжээний шиншлэгчид клиент болон серверийн хооронд хаана ч байсан гэсэн таны хэрэглэгч/нууц үгийн мэдээлэл эсвэл таны сессээр дамжсан өгөгдлийг хулгайлж чадна. OpenSSH нь ийм асуудлаас хамгаалж төрөл бүрийн нэвтрэлт таних болон шифрлэх аргуудыг санал болгодог.

## 15.10.2. sshd-г идэвхжүүлэх

sshd нь стандарт FreeBSD суулгацын явцад харуулагдах тохируулга юм. sshd идэвхжсэн эсэхийг харахдаа `rc.conf` файлаас дараах мөрийг шалгаарай:

    sshd_enable="YES"

Энэ нь дараагийн удаа таны систем эхлэхэд OpenSSH-д зориулсан sshd(8) дэмон програмыг дуудна. Мөн `/etc/rc.d/sshd` rc(8) скрипт ашиглан OpenSSH-г эхлүүлэх боломжтой байдаг:

    # /etc/rc.d/sshd start

## 15.10.3. SSH клиент

ssh(1) хэрэгсэл rlogin(1)-тэй адил ажилладаг.

    # ssh user@example.com
    Host key not found from the list of known hosts.
    Are you sure you want to continue connecting (yes/no)? yes
    Host 'example.com' added to the list of known hosts.
    user@example.com's password: *******

Нэвтрэлт нь `rlogin` эсвэл `telnet` ашиглан үүсгэгдсэн сесс шиг үргэлжлэх болно. SSH нь хэрэглэгч холбогдоход серверийн жинхэнэ эсэхийг шалгахын тулд түлхүүр хээ шалгах системийг хэрэглэдэг. Хэрэглэгч зөвхөн эхний удаа холбогдоход `yes` гэж оруулахыг шаардана. Дараа дараагийн нэвтрэлт оролдлогууд бүгд хадгалсан хээ шалгах түлхүүртэй харьцуулагдан шалгагддаг. Хэрэв хадгалсан хээ нь дараа дараагийн нэвтрэлтийн оролдлогуудаас хүлээн авсан хээнээс өөр бол SSH клиент нь танд түгшүүр өгнө. Хээнүүд `~/.ssh/known_hosts` файлд эсвэл SSH v2-ийн хээнүүд `~/.ssh/known_hosts2` файлд хадгалагдана.

Анхдагчаар OpenSSH серверүүдийн сүүлийн үеийн хувилбарууд зөвхөн SSH v2 холболтуудыг хүлээн авдаг. Клиент нь хэрэв боломжтой бол 2-р хувилбарыг ашиглах бөгөөд боломжгүй бол 1-р хувилбарыг ашигладаг. `-1` эсвэл `-2` тохируулгуудыг 1-р эсвэл 2-р хувилбаруудад зориулан дамжуулан клиентэд зөвхөн аль нэгийг ашиглахыг хүчилж болно. 1-р хувилбарын нийцтэй байдал нь клиентэд хуучин хувилбаруудтай нийцтэй байх зорилгоор дэмжигдсэн байдаг.

## 15.10.4. Аюулгүй хуулбарлалт

scp(1) тушаал rcp(1)-тэй адил ажилладаг; энэ нь файлыг алсын машинаас эсвэл машин уруу, ялгаатай нь аюулгүйгээр хуулдаг.

    #  scp user@example.com:/COPYRIGHT COPYRIGHT
    user@example.com's password: *******
    COPYRIGHT            100% |*****************************|  4735
    00:00
    #

Өмнөх жишээн дээр энэ хостын хувьд хээ нь аль хэдийн хадгалагдсан болохоор scp(1)-ийг энд ашиглах үед шалгагддаг.

scp(1)-ээр дамжуулсан нэмэлт өгөгдлүүд нь cp(1)-тэй адил бөгөөд эхний нэмэлт өгөгдөлд файл эсвэл файлууд, хоёр дахь дээр очих файлыг зааж өгдөг. Файл нь сүлжээгээр SSH-ээр татагддаг болохоор файлын нэг эсвэл хэд хэдэн нэмэлт өгөгдлүүд `user@host:<path_to_remote_file>` хэлбэрийг авдаг.

## 15.10.5. Тохиргоо

OpenSSH дэмон болон клиентийн системийн дагуух тохиргооны файлууд `/etc/ssh` санд байрладаг.

`ssh_config` клиентийн тохируулгуудыг тохируулдаг бөгөөд `sshd_config` нь дэмонг тохируулдаг.

Мөн `sshd_program` (анхдагчаар `/usr/sbin/sshd`) болон `sshd_flags` `rc.conf` тохируулгууд тохиргооны түвшнүүдийг илүүтэйгээр хангадаг.

## 15.10.6. ssh-keygen

Нууц үгүүдийг ашиглахын оронд ssh-keygen(1) нь хэрэглэгчийг шалгаж танихад DSA эсвэл RSA түлхүүрүүдийг үүсгэхэд хэрэглэгдэж болно:

    % ssh-keygen -t dsa
    Generating public/private dsa key pair.
    Enter file in which to save the key (/home/user/.ssh/id_dsa):
    Created directory '/home/user/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/user/.ssh/id_dsa.
    Your public key has been saved in /home/user/.ssh/id_dsa.pub.
    The key fingerprint is:
    bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com

ssh-keygen(1) нь шалгаж танихад хэрэглэгдэх нийтийн болон хувийн түлхүүр хослолыг үүсгэнэ. Хувийн түлхүүр `~/.ssh/id_dsa` эсвэл `~/.ssh/id_rsa`-д хадгалагдах бөгөөд харин нийтийн түлхүүр нь `~/.ssh/id_dsa.pub` эсвэл `~/.ssh/id_rsa.pub`-д DSA болон RSA түлхүүрийн төрлүүдэд зориулагдан хадгалагддаг. Тохируулга нь ажиллахын тулд нийтийн түлхүүр нь алсын машины `~/.ssh/authorized_keys` файлд DSA болон RSA түлхүүрүүдийн хоёулангийнх нь хувьд хийгдэх ёстой байдаг. Үүнтэй адилаар нийтийн түлхүүрүүдийн RSA хувилбар нь `~/.ssh/authorized_keys` файлд бас хийгдэх ёстой.

Энэ нь нууц үгүүдийн оронд SSH түлхүүрүүдийг ашиглан алсын машин уруу холбогдохыг зөвшөөрөх болно.

Хэрэв нэвтрэх үгнүүд ssh-keygen(1)-д ашиглагдаж байгаа бол хувийн түлхүүрийг хэрэглэхийн тулд хэрэглэгчээс нууц үгийг нэвтрэх болгонд асуудаг. ssh-agent(1) нь урт нэвтрэх үгнүүдийг дахин дахин оруулах тэр зовлонг зөөллөж чадах бөгөөд Хэсэг 15.10.7 хэсэгт тайлбарлагдсан байгаа болно.

> Сануулга: Төрөл бүрийн тохируулгууд болон файлууд нь таны систем дээр байгаа OpenSSH-ийн хувилбаруудаас шалтгаалан өөр өөр байдаг; асуудалтай учрахгүйн тулд та ssh-keygen(1) гарын авлагын хуудаснаас лавлах хэрэгтэй.

## 15.10.7. ssh-agent болон ssh-add

ssh-agent(1) болон ssh-add(1) хэрэгслүүд нь нэвтрэх үгнүүдийг дахин дахин бичүүлэлгүйгээр SSH түлхүүрүүдийг санах ойд дуудан ашиглаж болох аргуудаар хангадаг.

ssh-agent(1) хэрэгсэл нь түүн уруу дуудагдсан хувийн түлхүүр(үүд) ашиглан жинхэнэ эсэхийг шалгах танилтыг зохицуулна. ssh-agent(1) нь өөр програмыг ачаалахад хэрэглэгдэх ёстой. Хамгийн хялбартаа энэ нь бүрхүүл эсвэл илүү дэвшилттэйгээр ашиглавал цонхны удирдагч ажиллуулж болох юм.

ssh-agent(1)-ийг бүрхүүлд ашиглахын тулд үүнийг эхлээд бүрхүүлтэй цуг нэмэлт өгөгдөл маягаар ажиллуулах шаардлагатай. Хоёрдугаарт хэн бэ гэдэг мэдээллийг (identity) ssh-add(1)-г ажиллуулан нэмэх хэрэгтэй бөгөөд түүнд хувийн түлхүүрийн нэвтрэх үгнүүдийг өгөх хэрэгтэй. Эдгээр алхмууд хийгдсэний дараа хэрэглэгч харгалзах нийтийн түлхүүр суулгагдсан дурын хост уруу ssh(1) хийж чадах болно. Жишээ нь:

    % ssh-agent csh
    % ssh-add
    Enter passphrase for /home/user/.ssh/id_dsa:
    Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)
    %

X11 дээр ssh-agent(1) хэрэглэхийн тулд ssh-agent(1)-ийн дуудлага `~/.xinitrc`-д байх шаардлагатай. Ингэснээр X11-д ачаалагдсан бүх програмуудад ssh-agent(1)-ийн үйлчилгээнүүдийг үзүүлэх болно. Жишээ `~/.xinitrc` файл иймэрхүү харагдах болно:

    exec ssh-agent startxfce4

Энэ нь ssh-agent(1)-ийг ажиллуулах бөгөөд тэр нь эргээд X11 эхлэх бүрт XFCE-ийг ажиллуулна. Ингэж хийгдсэний дараа өөрчлөлтүүд нь үйлчлэхийн тулд X11 дахин эхэлсний хойно өөрийн SSH түлхүүрүүдийг бүгдийг ачаалахын тулд ердөө л ssh-add(1)-ийг ажиллуулаарай.

## 15.10.8. SSH туннель хийх

OpenSSH нь шифрлэгдсэн сессийн үед өөр протоколыг хайрцаглах туннель үүсгэх чадвартай байдаг.

Дараах тушаал telnet-д зориулж туннель үүсгэхийг ssh(1)-д хэлж өгнө:

    % ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
    %

`ssh` тушаал дараах тохируулгуудтай хэрэглэгдэнэ:

`-2`

  `ssh`-ийг протоколын 2-р хувилбарыг ашиглахыг зааж өгнө. (хэрэв та хуучин SSH серверүүдтэй ажиллаж байгаа бол үүнийг битгий ашиглаарай)

`-N`

  Тушаал байхгүй эсвэл зөвхөн туннель гэдгийг заана. Хэрэв үүнийг орхивол `ssh` ердийн сесс эхлүүлнэ.

`-f`

  `ssh`-ийг ард, далд ажиллуулахыг заана.

`-L`

  Локал туннелийг `localport:remotehost:remoteport` загвараар зааж өгнө.

`user@foo.example.com`

  Алсын SSH сервер.

SSH туннель нь сонсох сокетийг `localhost`-ийн заагдсан порт дээр үүсгэн ажилладаг. Дараа нь локал хост/порт дээр хүлээн авсан дурын холболтыг SSH-ээр дамжуулан заасан алсын хост болон порт уруу илгээдэг.

Жишээн дээр `localhost` дээрх `5023` порт нь алсын машины `localhost` дээрх `23` порт уруу дамжуулагдаж байна. `23` нь telnet учир энэ нь SSH туннелээр аюулгүй telnet сесс үүсгэнэ.

SMTP, POP3, FTP гэх зэрэг ямар ч аюултай TCP протоколуудын гүйцэтгэлийг хялбаршуулахад үүнийг ашиглаж болно.

Жишээ 15-1. SMTP-д зориулан SSH ашиглан аюулгүй туннель үүсгэх

    % ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
    user@mailserver.example.com's password: *****
    % telnet localhost 5025
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 mailserver.example.com ESMTP

Үүнийг ssh-keygen(1) болон нэмэлт хэрэглэгчийн бүртгэлүүдтэй цуг илүү үл үзэгдэх/төвөггүй SSH туннель хийх орчин үүсгэхэд ашиглаж болно. Түлхүүрүүд нь нууц үг бичихийн оронд ашиглагдаж болох бөгөөд туннелиуд нь тусдаа хэрэглэгч маягаар ажиллаж чадна.

### 15.10.8.1. SSH туннелийн практик жишээнүүд

#### 15.10.8.1.1. POP3 сервер уруу аюулгүй хандах

Ажил дээр чинь гаднаас холболтууд хүлээн авах SSH сервер байна. Бас тэр оффисийн сүлжээнд POP3 сервер ажиллуулж байгаа захидлын сервер байна. Таны гэр болон оффисийн хоорондын сүлжээ болон сүлжээний зам итгэж болохоор эсвэл итгэж болохооргүй байж магадгүй юм. Ийм учраас та өөрийн захидлыг аюулгүй аргаар шалгах хэрэгтэй юм. Үүний шийдэл нь өөрийн оффисийн SSH сервер уруу SSH холболт үүсгэж захидлын сервер уруу туннель хийх явдал юм.

    % ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
    user@ssh-server.example.com's password: ******

Туннель эхлэн ажилласны дараа та өөрийн захидлын клиентийнхээ POP3 хүсэлтүүдийг `localhost`-ийн 2110 порт уруу илгээхээр зааж өгч болно. Эндэх холболт туннелээр аюулгүйгээр дамжин `mail.example.com` уруу илгээгдэнэ.

#### 15.10.8.1.2. Хэцүү галт ханыг тойрон гарах

Зарим сүлжээний администраторууд хэтэрхий чанга галт ханын дүрэм ашиглан зөвхөн ирж байгаа холболтууд төдийгүй гарч байгаа холболтуудыг ч бас шүүдэг. Танд алсын машинуудад зөвхөн SSH болон вэбээр аялах 22 болон 80-р портуудад хандах боломжийг өгсөн байж болох юм.

Та хөгжим цацдаг Ogg Vorbis сервер зэрэг өөр (магадгүй ажилдаа холбоогүй) үйлчилгээ уруу хандахыг магадгүй хүсэж болох юм. Хэрэв энэ Ogg Vorbis сервер нь 22 эсвэл 80-аас бусад өөр порт дээр цацаж байгаа бол та түүнд хандаж чадахгүй юм.

Үүний шийдэл нь таны сүлжээний галт ханаас гаднах машин уруу SSH холболт үүсгэж үүнийг Ogg Vorbis сервер уруу туннель хийхэд ашиглах явдал юм.

    % ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
    user@unfirewalled-system.example.org's password: *******

Таны урсгал хүлээн авах клиент одоо `localhost`-ийн 8888 порт уруу заагдах бөгөөд тэр цаашаагаа галт ханыг амжилттайгаар гэтлэн `music.example.com` уруу дамжуулагдана.

## 15.10.9. `AllowUsers` хэрэглэгчийн тохируулга

Ямар хэрэглэгчид хаанаас орохыг хязгаарлаж өгөх нь зүйтэй юм. `AllowUsers` тохируулга нь үүнд хүрэх сайн арга юм. Жишээ нь `root` хэрэглэгчийг зөвхөн `192.168.1.32`-оос орохыг зөвшөөрөхийн тулд доор дурдсантай адил тохируулгыг `/etc/ssh/sshd_config` файлд хийх нь зүйтэй юм:

    AllowUsers root@192.168.1.32

`admin` хэрэглэгчийг хаанаас ч орохыг зөвшөөрөхийн тулд ердөө л хэрэглэгчийн нэрийг өөрийг нь жагсааж өгнө:

    AllowUsers admin

Олон хэрэглэгчид нэг мөрөнд жагсаагдах шаардлагатай:

    AllowUsers root@192.168.1.32 admin

> Тэмдэглэл: Та энэ машин уруу нэвтрэх хэрэгцээтэй хэрэглэгч бүрийг жагсааж өгөх нь чухал юм, тэгэхгүй бол тэдгээр нь орж чадахгүй болно.

`/etc/ssh/sshd_config`-д өөрчлөлтүүд хийснийхээ дараа sshd(8)-д өөрийн тохиргооны файлуудыг дахин дуудахыг дараах тушаалыг ажиллуулж та хэлж өгөх ёстой:

    # /etc/rc.d/sshd reload

## 15.10.10. Нэмэлт унших материалууд

OpenSSH

ssh(1) scp(1) ssh-keygen(1) ssh-agent(1) ssh-add(1) ssh_config(5)

sshd(8) sftp-server(8) sshd_config(5)

Өмнөх | Эхлэл | Дараах
IPsec дээгүүр VPN хийх | Дээш | Файлын системийн хандалт хянах жагсаалтууд

Энэ болон бусад баримтуудыг ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ хаягаас татаж авч болно.

FreeBSD-ийн талаар <questions@FreeBSD.org> хаягтай холбоо барихаасаа өмнө баримтыг уншина уу.
Энэ бичиг баримттай холбоотой асуулт байвал <doc@FreeBSD.org> хаягаар цахим захидал явуулна уу.
Энэ бичиг баримтын орчуулгатай холбоотой асуулт байвал <admin@mnbsd.org> хаягаар цахим захидал явуулна уу.