<< Предыдущий раздел | /\ Содержание | >> Следующий раздел

Удаленный вход: telnet

Telnet предназначен для входа в другой компьютер через сеть и интерактивной работы на нем ("так же, как на своем").

У telnet есть два режима работы: командный и "режим сессии". Обычно telnet запускают с указанием компьютера, к которому подключиться:

bobby:~% telnet class
Trying 193.124.166.227...
Connected to class.inp.nsk.su.
Escape character is '^]'.

Welcome to UNIX

login: _

После запуска на экране появляется обычное приглашение для входа в систему, и далее все выглядит точно так же, как на терминале, подключенном к тому компьютеру.

Для завершения telnet-сессии достаточно просто выйти из системы на удаленном компьютере (обычно для этого служит команда "logout").

Если запустить telnet без указания компьютера, то он переходит в командный режим, выдавая приглашение "telnet>". Обычно достаточно знать две команды: открыть соединение (open, или просто o) и выход (quit, q).

Команда open работает точно так же, как если указать telnet при запуске, к какому компьютеру подключиться (сравните с предыдущим примером):

bobby:~% telnet
telnet> o class
Trying 193.124.166.227...
Connected to class.inp.nsk.su.
Escape character is '^]'.

Welcome to UNIX

login: _

Она используется, например, когда не хочется, чтобы по команде ps другие пользователи могли узнать, куда сделан telnet.

Во время работы можно в любой момент перейти в командный режим, нажав Ctrl+] (закрывающая квадратная скобка) (при соединении telnet говорит об этом -- "Escape character is '^]'"). Вернуться обратно можно, просто нажав Enter.

Переходить в командный режим обычно требуется в двух случаях.

Замечание
В отличие от программ telnet под другими ОС (Dos, Windows...) telnet в Unix выполняет чисто связные функции. Непосредственно же выводом на экран он не занимается -- за это отвечает или сам Unix (на консоли) или xterm. Так что если что-то отображается неправильно (например, шрифты), то это проблема не telnet, а терминала.

Удаленный вход без пароля: rlogin

Вместо telnet для входа в другой компьютер можно пользоваться программой rlogin (remote login). У нее нет командного режима и при запуске надо просто указывать компьютер. Rlogin работает по другому протоколу и автоматически передает имя пользователя, так что вводить надо лишь пароль:

bobby:~% rlogin class
Password: 
Last login: Sat Mar 13 03:04:52 from Sky
You have mail.
[bolkhov@Class bolkhov]$ _

Чтобы "заморозить" rlogin, надо нажать символ тильды "~" и затем Ctrl+Z. Для "экстренного" завершения сессии надо нажать последовательно тильду и точку -- "~.". Обе комбинации воспринимаются только сразу после клавиши Enter.

Если требуется зайти на удаленный компьютере под другим именем (а оно ведь в отличие от telnet не спрашивается), то надо указать его в ключе "-l".

bobby:~% rlogin -l mickey class
Password: 

У rlogin есть еще одно достоинство: можно сделать так, что при входе пароль не будет спрашиваться!

Для этого надо, чтобы в home-директории на удаленном компьютере был файл с именем ".rhosts", в котором должны быть перечислены компьютеры, с которых разрешен вход без пароля -- по одному имени компьютера в каждой строке. Если надо разрешить вход пользователю с другим именем, то надо указать это имя через пробел после имени компьютера. Пример:

Sky.inp.nsk.su
Class.inp.nsk.su
Class.inp.nsk.su bagira

В этом примере разрешается беспарольный вход самому пользователю с компьютеров Sky и Class, и пользователю bagira с компьютера Class.

Поскольку файл .rhosts надо сначала создать, то по крайней мере первый раз придется все же зайти, введя пароль.

.rhosts -- это как бы "список гостей, которым разрешен вход".

Права на запись в .rhosts должен иметь только сам пользователь -- иначе .rhosts просто не используется. Очень рекомендуется также убрать права на его чтение всем, кроме владельца (chmod 600 .rhosts).

При указании имен компьютеров надо помнить одну тонкость: это должно быть так называемое каноническое имя, т.е. то, которое является первым в списке имен соответствующего компьютера в DNS. При ссылке на компьютер из другого домена проблем обычно не возникает -- указывается просто полное имя (например, sky.inp.nsk.su). Внутри же одной локальной сети на каждом компьютере могут быть свои правила -- для одного каноническим является короткое имя, для другого -- полное. Чтобы не разбираться каждый раз, как правильно, проще указывать каждую строчку два раза -- с полным именем и с коротким. Это позволит также иметь единый файл .rhosts на нескольких компьютерах (возможно, с разными понятиями об именах), просто копируя его между ними. Так, наш пример можно переписать следующим образом:

Sky.inp.nsk.su
Sky
Class.inp.nsk.su
Class
Class.inp.nsk.su bagira
Class            bagira

Общее между telnet и rlogin: escape-символы

И в telnet, и в rlogin для выполнения некоторых нестандартных действий (типа завершения) используются так называемые escape-символы -- в первом случае "^]", во втором -- "~". При этом возникает интересный вопрос: а если, к примеру, зайти по telnet на компьютер A, и с него сделать telnet на компьютер B? Escape-символ будет "пойман" telnet'ом с нашего компьютера на A, а "нажать" его тому, который с A на B, никогда не удастся. Аналогично и с rlogin.

Поскольку такая ситуация хоть редко, но возникает, то и telnet, и rlogin могут использовать другой escape-символ -- его можно указать ключом "-e". Таким образом, telnet на A можно запустить с одним символом, с A на B -- с другим, с B на C -- с третьим и т.д.

Выполнение команд на удаленном компьютере: rsh

Если настроен вход без пароля по rlogin, то можно прямо со своего компьютера запускать команды на той машине командой rsh (Remote SHell):

bobby:~% rsh class uname -sn
Linux Class.inp.nsk.su
bobby:~% _

Формат вызова команды rsh такой:

rsh [-l пользователь] <компьютер> <команда>

При использовании rsh надо помнить два правила:

Прервать команду, запущенную через rsh, обычно можно по Ctrl+C.

Если не указать команду, а просто "rsh <компьютер>", то rsh работает как rlogin. Поэтому обычно (из лени ;) набирают rsh вместо rlogin.

Замечание
Если вход без пароля на удаленном компьютере не разрешен (не настроен файл .rhosts), то пароль запрашиваться не будет -- просто появится сообщение "Permission denied".

Копирование файлов с удаленного компьютера: rcp

Если настроен вход без пароля по rlogin/rsh, то для копирования файлов с/на удаленный компьютер применять команду rcp (remote cp). В использовании она очень похожа на cp:

rcp <из-какого-файла> <в-какой-файл>

Но в имени файла можно указывать компьютер: например, "sky:/etc/fstab" означает "файл /etc/fstab на компьютере sky". При этом если имя файла не начинается с "/", то оно "считается" с home-директории на удаленном компьютере. Пример:

bobby:/tmp/f% ls -l
total 0
bobby:/tmp/f% rsh sky ls -l /etc/fstab
-rw-r--r--    1 root     sys         4501 Feb 24 20:07 /etc/fstab
bobby:/tmp/f% rcp sky:/etc/fstab .
bobby:/tmp/f% ls -l
total 5
-rw-r--r--   1 ivanov   lab5         4501 Mar 13 16:41 fstab
bobby:/tmp/f% _

Если надо "зайти" под пользователем с другим именем, то имя указывается через "@" перед именем компьютера: bagira@class:/etc/issue.

Rcp воспринимает ключи "-r" и "-p" аналогично обычной команде cp.

У rcp есть две тонкости:

Более надежная замена для rlogin/rsh/rcp: ssh

У программ telnet, rlogin, rsh, rcp есть два недостатка:

  1. Данные, включая пароли, передаются по сети в открытом виде -- воспользовавшись любой программой-шпионом сети, можно их перехватить.
  2. .rhosts (авторизация по имени компьютера и пользователя) дает довольно слабую гарантию защиты.

Для преодоления этих проблем была создана команда ssh (Secure SHell). Она используется практически так же, как rsh (и есть аналоги rlogin/rcp -- slogin и scp), но применяет для авторизации и передачи данных криптографические алгоритмы. Настраивать ssh несколько сложнее, чем rsh, и о ней будет подробно рассказано в специальной лекции.


<< Предыдущий раздел | /\ Содержание | >> Следующий раздел