Secure Shell (SSH)
2. Симетрично и асиметрично криптиране
4. SFTP (SSH File Transfer Protocol)
OpenSSH използва три различни техники за криптиране на информацията:
Асиметрично криптиране - използва се в началото на сесията (по време на така нареченият handshaking). Базира се два различни ключа - публичен (public) и частен (private). Двойка такива ключове притежават и сървъра и клиента. Съобщенията криптирани с публичния, могат да бъдат декриптирани само със съответния му частен и обратно. Клиентът първо получава публичният ключ от сървъра и го проверява от външен за сървъра CA (Certificate authority ) .
Иползвайки получения публичен ключ, клиентът изпраща криптиран с него своя публичен ключ. Сървърът със своя частен ключ декриптира съобщението, след което може да изпраща криптирани с публичния ключ на клиента съобщения, които само клиента може да декриптира със своя частен ключ. Идентифицирането на клиента става най-често с идентификатор и парола. Друг начин за идентифициране на клиента са предварително генерирани асиметрични SSH ключове .
След като е установена защитената връзка клиента и сървъра си разменят ключове за симетрично криптиране. С други думи при асиметричното криптиране публичните ключове се използват за изпращане на криптиране на съобщенията (един изпраща, само един може да го разчете). Частните ключове се използват за декриптиране и за електронен подпис (всеки който има публичния ключ може да го декриптира и да се увери в самоличността на изпратилия съобщението).
Симетрично криптиране - работи по-бързо и се използва по време на сесията. Разменените по защитена връзка ключове за симетрично криптиране се използват за криптиране и декриптиране на съобщенията.
Разликата между двата вида криптиране е показана на фигурата ( взета от https://www.techtarget.com/searchsecurity/definition/asymmetric-cryptography)
Хеш функции
Hashing е друга криптираща техника използвана от SSH. Използват се еднопосочни математически криптиращи функции чиито резултат не е предназначен за декриптиране. На практика е невъзможно от резултата на функцията да се установи какво й е подадено на входа. Използват се най-често за проверка на парола.
Добре е преди инсталацията да се актуализира информацията за хранилищата (repositories) на пакетите - за повече информация за хранилищата - https://ff.tu-sofia.bg/Unix/Packages/index.html.
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install openssh-server
Командата инсталира не само сървъра, а целия пакет от програми.$ 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
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
Командата scp е част от пакета OpenSSH, работи под CLI и се използва за зашитено копиране на файлове между два компютъра.
За копиране на файл върху сървъра:
$scp file host:path
За копиране на файл от сървъра:
$scp host:file path
За копиране на цяла директория трябва да се добави опция -r. Например:
$scp -r file host:path/directory
За login на сървър ubuntu-server.domain от команден ред като потребител със същото име :
$ssh ubuntu-server.domain
Разбира се вместо името може да се използва директно IP адреса на сървъра.
За login на сървър ubuntu-server.domain като друг потребител с име linuxconfig:
$ssh linuxconfig@ubuntu-server.domain
или:
$ssh -l 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