Linux / Unix команда: sshd

име

sshd - OpenSSH SSH демон

резюме

- - - - - - - - - - - - - - - - - [] -

описание

sshd (SSH Daemon) е програмата за демон за ssh (1). Заедно тези програми заменят rlogin и rsh и осигуряват сигурни криптирани комуникации между двама ненадеждни хостове по несигурна мрежа. Програмите са предназначени да бъдат толкова лесни за инсталиране и използване, колкото е възможно.

sshd е демонът, който слуша връзки за клиенти. Обикновено се стартира при стартиране от / etc / rc Той задейства нов демон за всяка входяща връзка. Раздвоените демони обработват обмен на ключове, криптиране, удостоверяване, изпълнение на команди и обмен на данни. Това внедряване на sshd поддържа едновременно SSH протокол 1 и 2.

SSH протокол версия 1

Всеки хост има специфичен за хоста RSA ключ (обикновено 1024 бита), използван за идентифициране на хоста. Освен това, когато демонът стартира, той генерира сървърен ключ RSA (обикновено 768 бита). Този ключ обикновено се регенерира всеки час, ако е бил използван и никога не се съхранява на диск.

Всеки път, когато даден клиент свързва демона, отговаря с ключовете му за обществени хостове и сървъри. Клиентът сравнява ключа за хост RSA със собствената си база данни, за да провери дали не е променен. След това клиентът генерира 256-битово произволно число. Той шифрова този произволен номер, използвайки както ключа за хост, така и сървърния ключ и изпраща кодирания номер на сървъра. И двете страни използват този произволен номер като ключ за сесия, който се използва за шифроване на всички по-нататъшни комуникации в сесията. Останалата част от сесията е криптирана с конвенционален шифър, понастоящем Blowfish или 3DES, като 3DES се използва по подразбиране. Клиентът избира алгоритъма за шифроване, който да се използва от предлаганите от сървъра.

След това сървърът и клиентът въвеждат диалогов прозорец за удостоверяване. Клиентът се опитва да се идентифицира чрез автентификация .rhosts, удостоверяване .rhosts, комбинирано с удостоверяване на хоста на RSA, удостоверяване чрез RSA за отговор или удостоверяване чрез парола .

Удостоверяването на Rhosts обикновено е забранено, защото е фундаментално несигурно, но може да бъде активирано в конфигурационния файл на сървъра, ако е необходимо. Системната сигурност не се подобрява, освен ако rshd rlogind и rexecd не са деактивирани (като по този начин напълно се деактивират rlogin и rsh в машината).

SSH протокол версия 2

Версия 2 работи по подобен начин: Всеки хост има специфичен за хост ключ (RSA или DSA), използван за идентифициране на хоста. Когато обаче демонтът започне, той не генерира ключ за сървър. Предоставената сигурност се осигурява чрез споразумение с Diffie-Hellman. Това ключово споразумение води до споделен ключ на сесията.

Останалата част от сесията е шифрована, използвайки симетричен шифър, понастоящем 128 битови AES, Blowfish, 3DES, CAST128, Arcfour, 192-битов AES или 256-битов AES. Клиентът избира алгоритъма за шифроване, който да се използва от предлаганите от сървъра. Освен това интегритетът на сесиите се осигурява чрез код за удостоверяване на криптографски съобщения (hmac-sha1 или hmac-md5).

Протокол версия 2 предоставя метод за удостоверяване на базата на публичен ключ (PubkeyAuthentication) или клиентски хост (HostbasedAuthentication), конвенционална идентификация на пароли и методи, базирани на предизвикателства.

Изпълнение на команди и препращане на данни

Ако клиентът успешно се идентифицира, се въвежда диалог за подготовка на сесията. По това време клиентът може да поиска неща като разпределяне на псевдо-tty, пренасочване на X11 връзки, препращане на TCP / IP връзки или препращане на връзката агент за удостоверяване чрез защитения канал.

И накрая, клиентът иска или черупка или изпълнение на команда. След това страните влизат в режим на сесия. В този режим всяка от страните може да изпраща данни по всяко време и такива данни се препращат към / от корпуса или командата от страна на сървъра, а потребителският терминал от страна на клиента.

Когато потребителската програма се прекрати и всички препратени X11 и други връзки са затворени, сървърът изпраща изходното състояние на командата на клиента и двете страни излизат.

sshd може да бъде конфигуриран чрез опции на командния ред или конфигурационен файл. Опциите на командния ред заменят стойностите, посочени в конфигурационния файл.

sshd препрочита своя конфигурационен файл, когато получи сигнал за окачване , SIGHUP, като се изпълни със името, което е стартирало като / usr / sbin / sshd

Опциите са както следва:

-b бита

Указва броя на битовете в сървърния бутон на ефимерния протокол версия 1 (по подразбиране 768).

Режим на отстраняване. Сървърът изпраща подробен изход за отстраняване на грешки в системния дневник и не се поставя във фонов режим. Сървърът също няма да работи и ще обработи само една връзка. Тази опция е предназначена само за отстраняване на грешки за сървъра. Множествените опции увеличават нивото на отстраняване на грешки. Максимумът е 3.

Когато тази опция е зададена, sshd ще изпрати изхода на стандартната грешка вместо системния журнал.

-f конфигурация_файл

Задава името на конфигурационния файл. По подразбиране е / etc / ssh / sshd_config sshd отказва да стартира, ако няма конфигурационен файл.

-g login_grace_time

Дава гратисно време за клиентите да се идентифицират (по подразбиране 120 секунди). Ако клиентът не успее да удостовери потребителя в рамките на много секунди, сървърът се прекъсва и излиза. Стойността на нула показва никаква граница.

-h host_key_file

Указва файл, от който се чете ключ на хост. Тази опция трябва да бъде дадена, ако sshd не се изпълнява като root (тъй като обикновените файлове на хост-ключ обикновено не могат да се четат от никого освен root). По подразбиране е / etc / ssh / ssh_host_key за протокол версия 1 и / etc / ssh / ssh_host_rsa_key и / etc / ssh / ssh_host_dsa_key за протокол версия 2. Възможно е да има няколко ключови файла на хост за различните версии на протокола и клавиша за хост алгоритми.

-i

Указва, че sshd се изпълнява от inetd. sshd обикновено не се изпълнява от inetd, защото трябва да генерира сървърния ключ, преди да може да реагира на клиента и това може да отнеме десетки секунди. Клиентите ще трябва да чакат твърде дълго, ако ключът се регенерира всеки път. Въпреки това, с малки размери на ключовете (напр. 512), използвайки sshd от inetd, може да е възможно.

-k key_gen_time

Указва колко често се регенерира ключът за сърфиране с версията на протокола версия 1 (по подразбиране 3600 секунди или един час). Мотивацията за регенериране на ключа често е, че ключът не се съхранява навсякъде и след около час става невъзможно да се възстанови ключът за декриптиране на прихванатите комуникации, дори ако машината е пукната или физически иззета. Стойността на нула показва, че ключът никога няма да бъде регенериран.

- опция

Може да се използва за предоставяне на опции във формата, използван в конфигурационния файл. Това е полезно за задаване на опции, за които няма отделен флаг на командния ред.

-p порт

Задава порт, на който сървърът слуша връзки (по подразбиране 22). Опциите за множество портове са разрешени. Портовете, посочени в конфигурационния файл, се игнорират, когато е зададен порт на командния ред.

-q

Тих режим. В системния дневник не се изпраща нищо. Обикновено се записват началото, автентичността и прекратяването на всяка връзка.

-T

Тестов режим. Проверявайте само валидността на конфигурационния файл и разумността на клавишите. Това е полезно за надеждно актуализиране на sshd, тъй като опциите за конфигуриране могат да се променят.

-u ле

Тази опция се използва за определяне на размера на полето в utmp структурата, която съдържа името на отдалечения хост. Ако разрешеното име на хост е по-дълго от точката, то вместо него ще бъде използвана десетичната запетая. Това позволява на хостовете с много дълги имена на хостове, които преливат това поле, за да бъдат уникално идентифицирани. Определянето - u0 показва, че в utmp файла трябва да се поставят само празни десетични адреси. - u0 също се използва за предотвратяване на това, че sshd прави заявки за DNS, освен ако механизмът или конфигурацията за удостоверяване го изискват. Механизмите за удостоверяване, които може да изискват DNS, включват RhostsAuthentication RhostsRSAAuthentication HostbasedAuthentication и използването на опция = list-pattern-list в ключов файл. Опциите за конфигуриране, които изискват DNS, включват използването на модел USER @ HOST в AllowUsers или DenyUsers

Когато тази опция е зададена, sshd няма да се отдели и няма да стане демон. Това позволява лесно наблюдение на sshd

-4

Принуждава sshd да използва само IPv4 адреси.

-6

Принуждава sshd да използва само IPv6 адреси.

Конфигурационен файл

sshd чете конфигурационните данни от / etc / ssh / sshd_config (или файла, определен с - f на командния ред). Файловият формат и опциите за конфигуриране са описани в sshd_config5.

Процес на вход

Когато потребител успешно влезе, sshd прави следното:

  1. Ако входът е на tty и не е зададена команда, отпечатва последното време за влизане и / etc / motd (освен ако не е възпрепятствано в конфигурационния файл или от $ HOME / .hushlogin виж раздела Sx FILES).
  2. Ако входът е на tty, записва времето за вход.
  3. Проверява / и т.н. / nologin, ако съществува, отпечатва съдържанието и приключва (освен ако не е root).
  4. Промените да се изпълняват с нормални потребителски права.
  5. Задава основна среда.
  6. Прочита $ HOME / .ssh / среда, ако съществува и потребителите имат право да променят обкръжението си. Вижте опцията PermitUserEnvironment в sshd_config5.
  7. Промени в началната директория на потребителя.
  8. Ако $ HOME / .ssh / rc съществува, го изпълнява; else, ако / etc / ssh / sshrc съществува, го изпълнява; в противен случай работи xauth. Файловете `` rc '' получават протокола за удостоверяване X11 и "бисквитката" в стандартен вход.
  9. Изпълнява черупката или командата на потребителя.

Формат на файла Authorized_Keys

$ HOME / .ssh / authorized_keys е файлът по подразбиране, който изброява публичните ключове, разрешени за удостоверяване на RSA в протоколна версия 1 и за удостоверяване с публичен ключ (PubkeyAuthentication) в протокол версия 2. AuthorizedKeysFile може да се използва за определяне на алтернативен файл.

Всеки ред от файла съдържа един ключ (празните линии и линии, започващи с "#" се игнорират като коментари). Всеки публичен ключ на RSA се състои от следните полета, разделени с интервали: опции, бита, експонент, модул, коментар. Всяка протоколна версия 2 публичен ключ се състои от: опции, keytype, base64 кодиран ключ, коментар. Полето с опции е по избор; присъствието му се определя от това дали линията започва с номер или не (полето за опции никога не започва с число). Полетата, експонентите, модулите и командите съдържат ключ RSA за протокол версия 1; полето за коментар не се използва за нищо (но може да е удобно за потребителя да идентифицира ключа). За протокол версия 2 типът на типа е `` ssh-dss '' или `` ssh-rsa ''

Обърнете внимание, че редовете в този файл обикновено са с дължина няколко стотин байта (поради размера на кодирането на публичния ключ). Не искате да ги въведете; вместо това, копирайте папката identity.pub id_dsa.pub или файла id_rsa.pub и го редактирайте.

sshd налага минимален размер на RSA ключовия модул за протокол 1 и протокол 2 ключове от 768 бита.

Опциите (ако има такива) се състоят от спецификации на опциите, разделени със запетая. Не се допускат интервали, освен в двойни кавички. Поддържат се следните спецификации на опциите (имайте предвид, че ключовите думи на опциите са нечувствителни към малки и големи букви):

от = модел списък

Указва, че в допълнение към удостоверяването с публичен ключ, каноничното име на отдалечения хост трябва да присъства в списъка с модели, разделени със запетая ("*" и "?" Служат като заместващи символи). Списъкът може да съдържа и модели, които са били отричани от тях с префиксиране с "!" ; ако каноничното име на хоста съвпада с отрицателен модел, ключът не се приема. Целта на тази опция е по избор повишаване на сигурността: удостоверяването с публичен ключ само по себе си не вярва на сървърите на мрежата или на сървърите за имена или каквото и да е друго (освен ключа); обаче, ако някой по някакъв начин открадне ключа, ключът позволява на нарушител да влезе от всяка точка на света. Тази допълнителна опция прави използването на откраднат ключ по-трудно (сървърите за имена и / или маршрутизаторите трябва да бъдат компрометирани в допълнение към само ключа).

команда = команда

Указва, че командата се изпълнява всеки път, когато този ключ се използва за удостоверяване. Командата, предоставена от потребителя (ако има такава), се игнорира. Командата се изпълнява на pty, ако клиентът поиска pty; в противен случай тя се изпълнява без tty. Ако се изисква 8-битов чист канал, не трябва да се изисква Pty или трябва да се посочи не-pty В командата може да се включи цитат, като се цитира с обратна наклонена черта. Тази опция може да е полезна, за да се ограничат определени публични ключове, за да се изпълни само определена операция. Един пример може да бъде ключ, който позволява отдалечени резервни копия, но нищо друго. Обърнете внимание, че клиентът може да посочи пренасочване на TCP / IP и / или X11, освен ако не са изрично забранени. Обърнете внимание, че тази опция се прилага за изпълнение на shell, команда или подсистема.

среда = NAME = стойност

Указва, че низът се добавя към средата, когато се влиза в този ключ. Променливите на средата, зададени по този начин, заменят останалите стойности на стандартната среда. Възможни са няколко опции от този тип. Обработката на околната среда е деактивирана по подразбиране и се управлява чрез опцията PermitUserEnvironment . Тази опция се деактивира автоматично, ако е активиран UseLogin .

не-порт препращане

Забранява пренасочването на TCP / IP, когато този ключ се използва за удостоверяване. Всяко искане на порт за препращане от клиента ще върне грешка. Това може да се използва, например във връзка с опцията за команда .

не-X11-спедиция

Забранява пренасочването на X11, когато този ключ се използва за удостоверяване. Всяко искане за препращане от X11 от клиента ще върне грешка.

не-агент препращане

Забранява препращането на агент за удостоверяване, когато този ключ се използва за удостоверяване.

не-PTY

Предотвратява разпределението на tty (заявката за разпределяне на pty ще се провали).

permitopen = хост: порт

Ограничете локалното препращане на `` ssh -L '' по такъв начин, че да се свързва само към посочения хост и порт. IPv6 адресите могат да се задават с алтернативен синтаксис: хост / пристанище Възможно е да се използват няколко опции с разрешение за отваряне, разделени със запетаи. При зададените имена на хостове не се извършва съвпадение на шаблони, те трябва да са буквални домейни или адреси.

Примери

1024 33 12121 ... 312314325 ylo@foo.bar

от "". niksula.hut.fi, "pc.niksula.hut.fi" 1024 35 23 ... 2334 ylo @ niksula

команда = "dump / home", не-pty, без препращане 1024 33 23 ... 2323 backup.hut.fi

permitopen = "10.2.1.55:80", разрешение = "10.2.1.56:25" 1024 33 23 ... 2323

Ssh_Known_Hosts файлов формат

Файловете / etc / ssh / ssh_known_hosts и $ HOME / .ssh / known_hosts съдържат публични ключове за всички известни хостове. Глобалният файл трябва да бъде подготвен от администратора (по желание) и файлът на потребителя се поддържа автоматично: когато потребителят се свърже от непознат хост, неговият ключ се добавя към потребителския файл.

Всеки ред в тези файлове съдържа следните полета: имена на хостове, битове, експоненти, модул, коментар. Полетата са разделени с интервали.

Имената на хостове са списък с модели, разделени със запетая ("*" и "?" Действат като заместващи символи); всеки модел, от своя страна, е съпоставен с каноничното име на хоста (при идентифициране на клиент) или срещу името, доставено от потребителя (при удостоверяване на сървър). Моделът може да бъде предхождан от "!" за да покаже отрицание: ако името на хоста съвпада с отрицателен модел, то не се приема (по този ред), дори ако съответства на друг шаблон на линията.

Битовете, експонентите и модулът се вземат директно от бутона за хост RSA; те могат да бъдат получени например от /etc/ssh/ssh_host_key.pub Полето за коментар по избор продължава към края на реда и не се използва.

Линиите, започващи с "#" и празни линии, се игнорират като коментари.

При извършване на удостоверяване на хоста автентичността се приема, ако съответстващият ред има правилния ключ. Поради това е допустимо (но не се препоръчва) да има няколко реда или различни ключове на хост за едни и същи имена. Това неизбежно ще се случи, когато във файла се поставят кратки форми на имена на хостове от различни домейни. Възможно е файловете да съдържат противоречаща информация; удостоверяването се приема, ако валидната информация може да бъде намерена от всеки файл.

Имайте предвид, че линиите в тези файлове обикновено са стотици знаци и определено не искате да въвеждате ключовете на хоста на ръка. По-скоро ги генерирайте с помощта на скрипт или като вземете /etc/ssh/ssh_host_key.pub и добавете имената на хост отпред.

Примери

затворен, ..., 130.233.208.41 1024 37 159 ... 93 closenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ..... =

Вижте също

scsh (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, moduli (5), sshd_config5, sftp-server8

T. Ylonen T. Kivinen М. Сааринен Т. Рин С. Лехтин "Архитектура на протокола SSH" draft-ietf-secsh-architecture-12.txt януари 2002 г. материал в процес на разработка

M. Friedl N. Provos WA Симпсън "Diffie-Hellman групов обмен за протокола за SSH транспортния слой" draft-ietf-secsh-dh-group-exchange-02.txt януари 2002 г. материал в процес на разработка

Важно: Използвайте командата човек ( % man ), за да видите как се използва команда на вашия компютър.