SSH пайдаланушыларына жаднама



SSH бұл — linux жүйелеріндегі таптырмас құрал. Linux серверлерге қосылу, оларды әкімшілендіру, ssh болмағанда қандай қиын болар еді. Сондықтан, онымен жұмысты жеңілдететін және оны тағы да жақынырақ түсінуге мүмкіндік беретін осы мақаланы аудардым. Мақаланың түпнұсқасы мұнда орналасқан. Мақала өте ауқымды болғандықтан, тек өзім пайдаланатын және ең пайдалы деген бөлімдерді аудардым. Егер барлық мақаланы оқуға ерінсеңіз, мақала соңына өтуіңізге болады. Мен онда қысқа жаднама келтірдім.


Кілттерді басқару


Теориялық жағынан бірнеше сөз: ssh парольмен емес, кілтпен авторизация жасайды. Кілт жабық және ашық бөлімдерден тұрады. Ашық кілт, кіру қажет болған сервердегі пайдаланушының жеке папкасына қойылады, жабық кілт — серверге кіретін пайдаланушының жеке папкасына қойылады. Екі кілт авторизация кезінде салыстырылады, егер барлығы ОК — жіберіледі. Маңызды: тек клиент қана серверге авторизация жасамайды, онымен бірге сервер де клиентке қатысты авторизацияланады (яғни, сервердің өзінің жеке кілті бар). Кілттің парольдан негізгі айырмашылығы — оны ұрлау мүмкін емес. Өйткені, авторизация кезінде кілт серверге берілмейді, ал жай ғана клиентте кілт бар екені дәлелденеді, ар жағы криптографиялық сиқырлар.

Кілттерді генерациялау


Кілтті ssh-keygen командасы арқылы генерациялауға болады. Егер қосымша параметрлер көрсетілмесе, ол барлығын қажетті жерлерге және дұрыс сақтайды.

Кілтті пароль арқылы қорғауға болады. Бұл пароль бір рет және кейбір уақытқа дейін сақталады. Егер пароль бос болса, онда кілт пайдаланылған кезде пароль сұралмайды. Егер парольді ұмытып кетсеңіз, оны қайта қалпына келтіру мүмкін емес.

Кілтке пароль ssh-keygen -p арқылы ауыстырылады.

Кілттің құрылымы


Егер кілтті ssh-keygen командасы арқылы генерациялау кезінде сұрақтарға үнсіз келісім бойынша жауап берген болсаңыз, кілттер келесі жерлерде орналасады:
~/.ssh/id_rsa.pub — ашық кілт. Кіру қажет болған серверге көшіріледі.
~/.ssh/id_rsa — жабық кілт. Оны ешкімге көрсетуге болмайды. Бұл өте маңызды, ашық кілт пен жабық кілтті жаңылыстырмау қажет. Ашық кілт жағдайында ешқандай қауіп жоқ.

Кілтті серверге көшіру


Сіз кіру керек болған сервердегі, пайдаланушының жеке папкасында, ~/.ssh/authorized_keys файлын құрып, оның ішіне ашық кілтті көшірсек, онда серверге парольсіз кіре беруге болады. Назар аударыңыз, файлға пайдаланушыдан басқа ешкімнің ешқандай құқығы болмауы қажет, әйтпесе, ssh оны қабылдамайды. Кілттің соңғы қатарында келесі түрде болады — user@machine. Оның авторизацияға ешқандай қатысы жоқ, ол тек қана кімнің кілті қай жерде екенін анықтау үшін ғана қажет. Бұл жолды өзгерту, кілтке ешқандай әсерін тигізбейді.

Егер пайдаланушының паролін білсеңіз, кілтті серверге көшіру жұмысын жеңілдетуге болады. ssh-copy-id user@server командасы, файлдарды қолмен өзгертпей ақ ашық кілтті көшіруге мүмкіндік береді.

Егер ssh стандартты емес (22) портта болса, онда команданы келесі түрде орындау қажет:
ssh-copy-id '-p 443 user@server'
Тырнақшаларға назар аударыңыз.

Сервердің кілті


Серверге бірінші рет кірген кезде, ssh сізден кілтке сенетіндігіңізді сұрайды. Егер жоқ деп жауап берсеңіз — байланыс үзіледі. Егер иә деп жауап берсеңіз -кілт ~/.ssh/known_hosts файлына сақталады. Қайсы кілт қай жерде екенін білу мүмкін емес (өйткені қауіпсіздік маңызды).

Егер сервер кілті ауысса (мысалы, серверде ОЖ қайта орнатылса), онда ssh кілттің жасанды, яғни өтірік кілт деп ескертпе жасайды. Назар аударыңыз, егер серверде ешқандай өзгеріс болмаған жағдайда да ssh ескертпелер жасап жатса, онда сіз қажетті серверге қосылайын деп жатқан жоқсыз (мысалы, жергілікті желіде тура сондай ip адресті компьютер пайда болса). Мұнда хакерлік шабуылдың болуы екіталай, бірақ, сонда да, егер ештеңе өзгермей кілт ауысып кетсе — онда сақ болған дұрыс (егер сізде авторизация кілтпен бола тұрып, сервер сізден пароль сұраса — онда өте сақ болып парольді енгізбеу керек).

Сервердің белгілі кілтін ssh-keygen -R server командасы арқылы жою қажет. Онымен бірге, IP-дің кілтін де жою керек (яғни, кілттер IP бойынша және Домен бойынша жеке-жеке сақталады): ssh-keygen -R server

Серверлердің кілттері мұнда /etc/ssh/ssh_host_rsa_key және мұнда etc/ssh/ssh_host_rsa_key.pub сақталады. Оларды:
a) ескі серверден жаңа серверге көшіруге;
b) ssh-keygen командасы арқылы генерить етуге болады.

Байқаңыздар, егер серверді клондасақ, онда ssh кілтті қайтадан генерация жасау қажет.

Ескі кілттерді know_hosts-тан жойған дұрыс. Болмаса ssh «dublicate key» деп ұрысуы мүмкін.

Файлдарды көшіру


Файлдарды серверге жіберу кейде шаршатуы мүмкін. sftp және басқа да біртүрлі заттармен қатар, ssh-да scp командасы бар. Ол арқылы файлдарды ssh-сессия арқылы көшіруге болады.

Локальді файлды серверге жіберу:
scp path/myfile [email protected]:/full/path/to/new/location/


Керісінше жасауға да болады:
scp [email protected]:/full/path/to/file /path/to/put/here


Fish warning: mc ssh арқылы байланыс орната алатындығына қарамай, онда файлдарды көшіру өте тиімсіз болады, өйткені fish (ssh-мен виртуалды fs секілді жұмыс жасауға қажет mc-нің модулі) өте баяу жұмыс жасайды. (аудармашыдан. сонымен бірге mc көшірерден алдын файлды tmp, уақытша папкаға аударады, ол өте үлкен файлдарды ~20-100Гб көшіргенде өте тиімсіз, өз басымнан өткізгенмін, ал scp олай жасамайды, тікелей серверге жібереді)

Қашықтықтан команданы орындау


ssh команданы қашықтықтан орындай алады. Команда орындалған соң ол байланысты сол арада үзеді. Қарапайым мысал:
ssh user@server ls /etc/ 

Бұл команда сервердегі /etc/ папкасының құрамын бізге шығарып береді.

Кейбір бағдарламалар басқарылатын терминалдың бар болуын талап етеді, оларды -t параметрі арқылы орындау керек:
ssh user@server -t remove_command


Сонымен қатар, конвейерлерді де пайдалана аламыз:
ssh user@server cat /some/file|awk '{print $2}' |local_app


Бұл бізді келесі фичаға алып келеді:

stdin/out-ы бағыттау


Мысалы, бізге команданы қашықтықтан орындап, нәтижені локальді файлда сақтау қажет болсын, оны келесі түрде жасауға болады:
ssh [email protected] command >my_file


Егер, локальді нәтижені серверге сақтау керек болса:
mycommand | ssh [email protected] «scp — [email protected]:/path/to/file»


Алиастар


Шынымды айтсам, алиастар туралы соңғы уақытқа дейін білмедім және қолданбадым. Өте пайдалы құрал болып шықты. аудармашыдан. бұл маған да тиесілі )

Үлкен компанияларда серверлердің аттары көбінесе келесі түрде болады: spb-MX-i3.extrt.int.company.net. Ондағы пайдаланушы локальді пайдаланушыға тең емес (аудармашыдан. егер тең болса, ssh орындағанда пайдаланушының атын жазбауға болады, онда ssh жергілікті пайдаланушының атын қояды). Яғни, былай қосылу керек:
ssh [email protected].

Бұлай әрдайым жаза беру өте шаршатады. Ал кішігірім компанияларда мәселе кері жағынан туындайды — ешкім DNS туралы ойламайды, яғни, серверге былай қосыламыз: ssh [email protected]. Қысқасы, бәрібір шаршатады. Одан да қиын жағдай егер ssh 22-ші порттан басқа портта болса. Онда команданы былай жазу керек: ssh -1 -p 334 [email protected]. Ал scp туралы мұнда айтудың да қажеті жоқ шығар.

~/.ssh/config файлында байланыс параметрлерін көрсетуге болады, ең маңыздысы, әр серверге әр түрлі параметрлер беруге болады. Міне конфигтің мысалы:

Host ric
        Hostname ооо-рога-и-копыта.рф
        User Администратор
        ForwardX11 yes
        Compression yes
Host home
        Hostname myhome.dyndns.org
        User vasya
        PasswordAuthentication no


Барлық қолдануға болатын параметрлерді мұнда қарауға болады:man ssh_config (sshd_config-пен шатастырмаңыз).

Үнсіз келісім бойынша баптаулар

«Host *» конструкциясы бойынша байланыстың үнсіз келісім бойынша баптауларын көрестуге болады. Мысалыға:

Host *
User root
Compression yes


Яғни, енді кез-келген хостқа байланыс кезінде пайдаланушы атын көрсетпесек, ол root падаланушыны байланысуға әрекет жасайды. Тура осы баптауды /etc/ssh/ssh_config (/etc/ssh/sshd_config файлымен шатастырмаңыз) файлында жазуға болады, бірақ ол үшін root құқығы қажет және бұл баптаулар барлық пайдаланушылар үшін қолданылады.

Соңы


Мақаланың негізгі нұсқасында тағы бірнеше бөлімдер бар, олар да маңызды және өте пайдалы. Егер қызығушылық болып жатса, оларды да аударуға болады. Мақала басында уәде берілген, қысқышы жаднама:

  • ssh-keygen -p — кілт паролін өзгерту
  • ssh-copy-id [email protected] — ашық кілтті x.x.x.x серверіне көшіру
  • ssh-keygen -R server — сервердің белгілі кілтін жою
  • scp path/myfile [email protected]:/full/path/to/new/location/ — жергілікті файлды серверге жіберу
  • scp [email protected]:/full/path/to/file /path/to/put/here — файлды серверден көшіріп алу
  • ssh user@server ls /etc/ — команданы қашықтықтан орындау (-t егер басқарылатын терминал қажет болса)
  • ssh [email protected] command >my_file — қашықтықта орындалған команда нәтижесін, жергілікті файлда сақтау (stdout-ы жергілікті файлға бағыттаймыз)
  • mycommand |scp — [email protected]:/path/remote_file — жергілікті орындалған команда нәтижесін қашықтықтағы файлға сақтау


Сонымен қатар төмендегі порттарды лақтыру командасы да өте пайдалы. Мысалы, 192.168.1.103 хостында 3306 портта mysql жұмыс жасап тұрған болсын және біз тікелей оған қосыла алмаймыз (админ құқықтарды шектеп тастаған болсын). Бірақ ssh арқылы хостқа қосылуға болатын болсын. Онда келесі команда арқылы хосттағы 3306 портын жергілікті 3308 портына лақтыруға болады:
ssh -L 3308:127.0.0.1:3306 user@server

Бұл командадан соң бүкіл 3308 портына жіберілген сұранымдар сервердің 3306 портына жіберіледі. Яғни, енді біз mysql-ге былай қосыла аламыз:
mysql -uroot -ppass -h 127.0.0.1 -P 3308

  • +2
1 пікір
kamyrov
Өте пайдалы), рахмет!
Тек тіркелген қолданушылар ғана пікір қалдыра алады.