Secure Shell (SSH)

1.  Въведение

2. Симетрично и асиметрично криптиране

3.  Инсталиране

4. SFTP (SSH File Transfer Protocol)

5. scp - Secure File Copy

6.  Примерни команди


       

 

        1.        Въведение

 SSH (на английски: Secure Shell – сигурна обвивка) е мрежов протокол, позволяващ криптирано предаване на данни през незащитена връка.  Най-често се използва за изпълняване на команди на отдалечена машина,  администриране на отдалечената машина и прехвърляне на файлове от една машина на друга, но може да се използва за  защита на други мрежови услуги.

При изпращане от компютър данни към мрежата, SSH  ги криптира, а след получаването им от крайния потребител, SSH  ги декриптира. SSH може да бъде използван от машини с различна операционна система, като Windows, Unix, Macintonsh и OS/2. Протоколът използва асиметрично криптиране с публични и частни ключове. При всяка сесия те се използват за генериране на нов симетричен ключ, с който се криптира връзката.

Има различни версии: SSH1, в който криптирането не е достатъчно сигурно; SSH2, който използва различни по-сигурни алгоритми за криптиране, но има редица лицензни ограничения и не е съвместим с SSH1. През  1999 излиза първата версия на  OpenSSH, който представлява свободна реализация на SSH2 протокола, разработвана в рамките на OpenBSD проекта. Базиран е на последната свободна версия на SSH. Развива се бързо и става една от предпочитаните SSH реализации в света.

 OpenSSH не е една единична програма, а е множество от програми, които служат за заменяне на некриптираните програми като Telnet и FTP. Има клиент - сървър архитектура, като сървърът позволява SSH връзка до машината, включваща автентикация и оторизация. В повечето Unix/Linux  SSH реализации, сървърът носи името sshd и работи на порт 22. Клиентът се свързва до SSH сървъра и изпълнява заявки - например оторизация или копиране на определен файл. Основни клиенти под Unix/Linux са ssh, scp и sftp,  а  под Windows - Putty (вместо открития  Telnet)  и Winscp ( вмвсто открития FTP).

    2.        Симетрично и асиметрично криптиране

 OpenSSH използва три различни техники за криптиране на информацията:

Асиметрично криптиране - използва се в началото на сесията (по време на така нареченият handshaking). Базира се два различни ключа - публичен (public) и частен (private). Двойка такива ключове притежават и сървъра и клиента. Съобщенията криптирани с публичния, могат да бъдат декриптирани само със съответния му  частен и обратно.  Клиентът първо получава публичният ключ от сървъра  и го проверява от външен за сървъра  CA (Certificate authority ) .  

Иползвайки получения публичен ключ, клиентът изпраща криптиран с него своя публичен ключ. Сървърът със своя частен ключ декриптира съобщението, след което може да изпраща криптирани с публичния ключ на клиента съобщения, които само клиента може да декриптира със своя частен ключ.  Идентифицирането на клиента става най-често с идентификатор и  парола. Друг начин за идентифициране на клиента са предварително генерирани асиметрични SSH ключове .

След като е установена защитената връзка клиента и сървъра си разменят ключове за симетрично криптиране. С други думи при асиметричното криптиране публичните ключове се използват за изпращане на криптиране на съобщенията  (един изпраща, само един може да го разчете). Частните ключове се използват за декриптиране и за електронен подпис (всеки който има публичния ключ може да го декриптира и да се увери в самоличността на изпратилия съобщението).

Симетрично криптиране - работи по-бързо и се използва по време на сесията. Разменените по защитена връзка ключове за симетрично криптиране се използват за криптиране и декриптиране на съобщенията.

Разликата  между двата вида криптиране е показана на фигурата ( взета от https://www.techtarget.com/searchsecurity/definition/asymmetric-cryptography)

Хеш функции

Hashing е друга криптираща техника използвана от SSH. Използват се  еднопосочни математически криптиращи функции чиито резултат не е предназначен за декриптиране. На практика е невъзможно от резултата на функцията да се установи какво й е подадено на входа. Използват се най-често за проверка на парола. 

        3.        Инсталиране

 Добре е преди инсталацията да се актуализира информацията за хранилищата (repositories)  на пакетите - за повече информация за хранилищата -  https://ff.tu-sofia.bg/Unix/Packages/index.html.

$ sudo apt update

Инсталира се с:

$ sudo apt install  openssh-server

Командата инсталира не само сървъра, а целия пакет от програми.
 
След инсталацията услугата стартира автоматично. Проверка дали сървърът е активен може да се извърши с команда за извеждане на статуса на услугата ssh (не са необходими административни права):

$ service ssh status

 ssh.service - OpenBSD Secure Shell server
   ● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enab
   Active: active (running) since Tue 2019-04-02 09:53:21 EEST; 9h ago
  Process: 24349 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 24350 (sshd)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/ssh.service
           └─24350 /usr/sbin/sshd -D

Сървърът работи и услугата е активна ако присъства  "Active: active (running)", което показва последното рестартиране на сървъра. С  'q'  командата завършва и се извежда отново системният prompt.

Активната услуга означава, че ssh сървърът е готов за приемане или отхвърляне на връзка,  ssh клиентът може да се ползва за  връзка към  друга машина.  За връзка от  Windows  машина могат да се ползват клиентиите Puttty (вместо открития Telnet) и Winscp (вместо открития FTP).

4.        SFTP (SSH File Transfer Protocol)

SFTP  е алтернативен протокол на FTP за обменяне на файлове по криптирана връзка. Няма докрай утвърден стандарт а по скоро draft версии на различни версии. OpenSSH се базира на най-модерната версия - V3

В Linux командата sftp e част от OpenSSH  пакета, работи под CLI. и има собствен набор от команди. При влизане в sftp сесия командният prompt става sftp> . При първоначално влизане в нов сървър  е необходимо да се потвърди публичният ключ на машината:

$sftp localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:OqyygUhvWXAvtp0AVDp66mGOwgJWTymiQaIZl7aIlbU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 
yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
imom@localhost's password:
Connected to localhost.
sftp>

Команди ( съгласно man sftp):

Available commands:
bye                                    Quit sftp
cd path                                Change remote directory to 'path'
chgrp [-h] grp path              Change group of file 'path' to 'grp'
chmod [-h] mode path               Change permissions of file 'path' to 'mode'
chown [-h] own path                Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-afpR] remote [local]         Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln [-s] oldpath newpath            Link remote file (-s for symlink)
lpwd                               Print local working directory
ls [-1afhlnrSt] [path]             Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-afpR] local [remote]         Upload file
pwd                                Display remote working directory
quit                               Quit sftp
reget [-fpR] remote [local]        Resume download file
rename oldpath newpath             Rename remote file
reput [-fpR] local [remote]        Resume upload file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help


The grep/egrep shell command не е включена в sftp командите. За да може да се изпълни egrep команда на файла на сървъра трябва да се използва команда  ssh.

5.        scp - Secure File Copy

Командата scp е част от пакета OpenSSH, работи под CLI и се използва за зашитено копиране на файлове между два компютъра.

За копиране на файл върху сървъра:

$scp file host:path       

За копиране на файл от сървъра:

$scp host:file path       

За копиране на цяла директория трябва да се добави опция -r. Например:

$scp -r file host:path/directory

        6.        Примерни команди

За login на сървър ubuntu-server.domain от команден ред като потребител със същото име :

$ssh ubuntu-server.domain

За login  на сървър ubuntu-server.domain  като друг потребител  с име linuxconfig:

$ssh linuxconfig@ubuntu-server.domain

За криптирано копиране на файл с име fileName в текущата директория върху сървъра remotehost  в директория /home/username/destination :

$scp fileName user@remotehost:/home/username/destination

Под Windows за login и копиране се използват съответно  безплзтните  програми puttty и winscp. 

За  временно дезактивиране на услугата:

$sudo service ssh stop

За активиране отново:

$sudo service ssh start

За напълно дезактивиране и след рестартиране на компютъра:

$sudo systemctl disable ssh

За активиране отново след рестартиране:

$sudo systemctl enable ssh