SSH. Практическое занятие.

 

Создание ключей.

  1. 1.Выполнить команду ssh-keygen -t rsa -N '': 

student@host1:~$ ssh-keygen -t rsa -N ''

Generating public/private rsa key pair.

Enter file in which to save the key (/home/student/.ssh/id_rsa):

Created directory '/home/student/.ssh'.

Your identification has been saved in /home/student/.ssh/id_rsa.

Your public key has been saved in /home/student/.ssh/id_rsa.pub.

The key fingerprint is:

cd:42:6c:a2:e4:7a:ba:a4:ef:73:4b:c1:88:7e:eb:4d student@host1

The key's randomart image is:

+--[ RSA 2048]----+

|                 |

|       .         |

|    . . +        |

| . = . + o       |

|. . =   S o      |

|.  . .   .       |

| .o.oE           |

| oo+=            |

|.o**.o           |

+-----------------+

  1.  

  2. 2.Проверить выполнение ssh-команды ssh student@localhost ls -l: 

student@host1:~$ ssh student@localhost ls -l

student@localhost's password:

total 12

drwxr-xr-x 6 student users 4096 Aug  1 17:00 Maildir

drwxr-xr-x 8 student users 4096 Oct 30  2012 rpmbuild

drwxr-xr-x 2 student users 4096 Oct 11 09:03 tmp

  1. 3.Записать публичный ключ на сервер: 

student@host1:~$ ssh-copy-id -i ~/.ssh/

id_rsa       id_rsa.pub   known_hosts  

student@host1:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub student@localhost

student@localhost's password:

Now try logging into the machine, with "ssh 'student@localhost'", and check in:

 

  ~/.ssh/authorized_keys

 

to make sure we haven't added extra keys that you weren't expecting.

  1. 4.Проверить выполниение предыдущей команды: 

student@host1:~$ ssh student@localhost ls -l

total 12

drwxr-xr-x 6 student users 4096 Aug  1 17:00 Maildir

drwxr-xr-x 8 student users 4096 Oct 30  2012 rpmbuild

drwxr-xr-x 2 student users 4096 Oct 11 09:03 tmp

Удалённое выполнение графических программ.

Для предоставления возможности выполнить удалённую графическую утилиту надо, чтобы на стороне ssh-сервера были включены “X11Forwarding yes” и “X11DisplayOffset 10”. На стороне клиента надо разрешить удалённое выполнение программ через протокол X11 для удалённой стороны:

student@host1:~$ cat /etc/ssh/sshd_config | grep X11

X11Forwarding yes

X11DisplayOffset 10

и

student@host2:~> xhost + host1

 

Попробуем выполненить команду xclock:

student@host2:~> ssh student@host1 xclock

student@host1's password:

Error: Can't open display:

 

Проверим переменную окружения DISPLAY:

student@host2:~> ssh student@host1

student@host1's password:

Last login: Fri Oct 11 09:36:53 2013 from host2

Linux 3.2.45.

 

student@host1:~$ echo $DISPLAY

 

Переменной DISPLAY нет.

 

То же самое с ключём “-X”:

student@host2:~> ssh -X student@host1

student@host1's password:

Last login: Fri Oct 11 09:46:31 2013 from host2

Linux 3.2.45.

 

student@host1:~$ echo $DISPLAY

localhost:10.0

 

Повторим  выполнение команды xclock:

student@host2:~> ssh -X student@host1 xclock

student@host1's password:

 

Запуск удалённой графической утилиты прошёл успешно.

 

Создание тоннеля.

  1. 1.Проверим, что на локальном хосте интересующий на порт закрыт. Например порт 80: 

    student@host1:~$ netstat -an|grep -w LISTEN | grep 80 

  2. 2.На удалённом сервере загрузим WEB-сервер Apache: 

host2:~ # netstat -an|grep -w LISTEN | grep 80

tcp        0      0 :::80                   :::*                    LISTEN      

  1. 3.Для создания тоннеля между локальным хостом, ssh-сервером и удалённым хостом надо выполнить команду: 

    ssh -L 8080:127.0.0.1:80 student@host2 

The authenticity of host 'host2 (192.168.2.86)' can't be established.

ECDSA key fingerprint is b6:44:f6:b7:a6:53:14:d3:80:cc:00:bc:cc:aa:65:a4.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'host2' (ECDSA) to the list of known hosts.

Password:

Last login: Fri Oct 11 08:56:05 2013 from console

Надо учесть, что пользователь (не root) не может открывать привелегированные порты. Поэтому мы вместо 80-го порта на локальном хосте открыли порт 8080.

В данном примере в качестве удалённого хоста был указан адрес 127.0.0.1.

  1. 4.Проверим порт на локальном хосте: 

    student@host1:~$ netstat -an|grep -w LISTEN | grep 80 

tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN    

tcp6       0      0 ::1:8080                :::*                    LISTEN    

  1. 5.Проверим работу тоннеля: 

    student@host1:~$ links http://127.0.0.1:8080