Форумы

GNU.SU - Записки нубо-0peraойда :: Форумы :: Сервисы :: SSH
 
<< Предыдущая тема | Следующая тема >>
Шесть вещей про SSH которые необходимо знать от WeLinux.Ru
Модераторы: Браузер 0pera, Frizze, andrey, Bender
Автор Добавил
Браузер 0pera
Сбт Окт 23 2010, 04:57
andreika

ID пользователя #1
Зарегистрирован: Птн Апр 30 2010, 12:25

Сообщений: 337
Оригинал

Если вы когда-нибудь серьезно пользовались Linux, то скорее всего уже хоть немного знакомы с основами SSH. Но вы хотите узнать больше. В этой статье мы дадим вам шесть советов по SSH для пополнения знаний . (А еще это отличная тема для коктейльной вечеринки)

(1) Командуйте!

Все знают, что SSH используется для доступа к удаленному шелу, но знаете ли вы, что его можно использовать для запуска команд на них? Вы можете просто добавить команду после имени хоста!

Например:

andreika@hometelega:~$ ssh bebop uname -a
Linux bebop 2.6.32-24-generic #39-Ubuntu SMP Wed Jul 28 05:14:15 UTC 2010 x86_64 GNU/Linux


В сочетании с беспарольным входом по SSH, вы сможете расширить возможности своих скриптов. Хотите узнать, какая версия Python установлена на каждой из ваших систем? Просто сложите ssh hostname python -V в цикле и все готово!

Но это работает не со всеми командами:

andreika@hometelega:~$ ssh bebop top
TERM environment variable not set.


Почему? Некоторые программы требуют псевдо-терминал и не знают что делать, когда его нет (все, что хочет рисовать в любой части экран, а скорее всего попадает в эту категорию). Но ssh может обработать это с помощью опции -t. Ssh выделит вам псевдо-терминал, и тогда программа заработает.

# Наслаждаемся процессом мониторинга
andreika@hometelega:~$ ssh bebop -t top
# Если вы используете [b]GNU Screen[/b], восстановите сессию одной командой
andreika@hometelega:~$ ssh bebop -t screen -dr


(2) Пожалуйста, вот вам порты

Подождите, вот еще! Возможности ssh для проброса порта огромны. Допустим, у вас на работе есть веб-панель на 80 порту сервера для аналитики и доступна только внутри корпоративной сети, а сейчас 2 часа ночи, и вам срочно нужен к ней доступ из дома, а ваш пейджер выключился.

К счастью, у вас есть ssh-доступ к вашей рабочей машине, которая находится в той же сети, что и сервер аналитики. Если вы можете подключится к рабочей машине, а она может подключится к серверу аналитики, значит мы можем сделать это, не так ли?

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

andreika@hometelega:~$ ssh desktop -L 8080:desktop:80


Итак, с ssh desktop все ясно. Опция -L port:hostname:hostport говорит "Установить проброс с port (в этом случае 8080) к hostname:hostport (тут desktop:80)."

Теперь, если вы откроете http://localhost:8080/ в веб-браузере у себя дома, то будете подключены к 80-му порту рабочего компьютера. Близко, но не совсем! Помните, мы хотели подключится к веб-панеле, запущенной на 80-м порту сервера аналитики, а не рабочей машине.

Все, что нам осталось, это выполнить команду:

andreika@hometelega:~$ ssh desktop -L 8080:analytics:80


Теперь, удаленный конец проброшенного порта это analytics:80, который находится именно там, где запущена веб-панель. Но подождите, разве сервер аналитики не за фаерволом? Как мы можем добраться до него? Помните: это соединение установлено на удаленной системе (рабочем компьютере), и только из-за этого оно работает.

Если вам необходимо создавать много таких пробросов, то, возможно, больше подойдет что-то подобное:

andreika@hometelega:~$ ssh -D 8080 desktop


Эта команда установит SOCKS-прокси на localhost:8080. Если вы настроите свой браузер использовать ее, то весь трафик браузера пойдет по SSH через вашу удаленную систему. Это значит что вы сможете прямо с браузера перейти на http://analytics/.

(3) Не забывайте про тильду

Загадка: подключитесь через ssh к системе, нажмите пару раз Enter, а потом наберите тильду. Ничего не появилось. Почему?

Потому что тильда в ssh является экранирующим символом. Прямо сначала строки вы можете нажать ~ и еще какую-то клавишу, чтоб выполнить интересные вещи с вашим ssh-соединением (таких как добавить 30 бонусных жизней после каждого проигрыша). ~? - покажет полный список управляющих последовательностей, но две самые удобные это ~. и ~^Z.

~. (тильда с точкой) оборвет ваше ssh-соединение, что удобно, когда оборвалось сетевое соединение, а вы не хотите ждать пока ssh-сессия оборвется.
~^Z (тильда с Ctrl+Z) отправит соединение в фоновый режим, если вы в это же время хотите еще что-то сделать. Вот пример в действии:

andreika@hometelega:~$ ssh bebop
andreika@bebop:~$ sleep 10000
andreika@bebop:~$ ~^Z [suspend ssh]

[1]+ Stopped ssh bebop
andreika@hometelega:~$ # Делаете что-то еще
andreika@hometelega:~$ fg # и вы снова здесь!


(4) Отпечатки пальцев

Я уверен, что вы видели это миллион раз и просто нажимали "yes", не думая:

andreika@hometelega:~$ ssh bebop
The authenticity of host 'bebop (192.168.1.106)' can't be established.
RSA key fingerprint is a2:6d:2f:30:a3:d3:12:9d:9d:da:0c:a7:a4:60:20:68.
Are you sure you want to continue connecting (yes/no)?


Что тут происходит? Если это ваше первое подключение к bebop, то вы не можете точно сказать что это действительно bebop, или же какой-то самозванец, который выдает себя за bebop. Все что вы знаете, это "отпечаток пальцев" (ключ) системы, к которой вы обращаетесь. В принципе, вы должны проверить это вручную (тоесть позвонить туда, где находится удаленный хост, и попросить их прочитать ключ).

Допустим вы и ваш помешанный на безопасности друг действительно хотите это сделать. Как вы можете узнать этот ключ? На удаленном хосте ваш друг должен выполнить:

sbaker@bebop:~$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
2048 a2:6d:2f:30:a3:d3:12:9d:9d:da:0c:a7:a4:60:20:68 /etc/ssh/ssh_host_rsa_key.pub (RSA)


Парам! Они совпадают, и это означает что можно спокойно продолжать. С этого момента ключ сохранен в вашем списке известных хостов (в ~/.ssh/known_hosts), так что вам не придется подтверждать каждый раз. И если когда-то на другом конце изменится ключ, вы увидите предупреждение, что кто-то пытается читать ваш трафик! (Или ваш друг переустановил систему и не сохранил ключ.)

(5) Потеряли ваши ключи

К сожалению, спустя некоторое время, вы и ваш друг должны расстаться (что-то о Kirk vs. Picard) (имеются ввиду знаменитые герои Star Trek Джеймс Тибий Кирк и Жан-Люк Пикард - прим.переводчика), и вы хотите удалить его ключ из своего списка известных хостов. "Без проблем," думаете вы, "Я просто удалю его из своего списка известных хостов.". Вы открываете файл и будете неприятно удивлены: перемешанный файл, с кучей непонятных символов. На самом деле это хеши имен хостов (или IP-адресов), к которым вы подключались раньше, и соответствующие им ключи.

Перед тем как продолжить, вы, конечно, спросите себя: "К чему все усложнять? Почему нельзя просто перечислить имена хостов простым текстом, чтоб люди могли легко редактировать файл?". На самом деле все так и было до недавнего времени. Но оказывается оставлять их в таком виде - это потенциальная дыра в безопасности, так как предоставляет злоумышленнику удобный список других мест, к которым вы подключались (мест где, к примеру, пользователь может невольно использовать те же пароли).

К счастью, ssh-keygen -R делает трюк:

andreika@hometelega:~$ ssh-keygen -R bebop
/home/wdaher/.ssh/known_hosts updated.
Original contents retained as /home/wdaher/.ssh/known_hosts.old


Как я сказал, все еще нет простого способа удалить ставшие горькими воспоминания о вашей бывшей дружбе.

(6) Подключение под другим именем...

Если вы дочитали до этого места, то вы уже профессионал в ssh. Как и другие профессионалы, вы логинитесь в кучу систем, в каждой свое имя пользователя, порты и длинные хостнеймы. Такие как ваши акаунты в AWS, Rackspace Cloud, ваш выделенный сервер или домашние системы ваших друзей.

И вы уже знаете как это делается: username@host или -l username чтобы указать ваше имя пользователя и -p portnumber чтобы указать порт:

andreika@hometelega:~$ ssh -p 2222 bob.example.com
andreika@hometelega:~$ ssh -p 8183 waseem@alice.example.com
andreika@hometelega:~$ ssh -p 31337 -l waseemio wsd.example.com


Но это забывается очень быстро, особенно когда вам необходимо пройти через кучу других параметров для каждого из этих подключений. Откройте .ssh/config, файл в котором вы можете указать удобные псевдонимы для каждого набора этих параметров:

Host bob
        HostName bob.example.com
        Port 2222
        User wdaher
       
Host alice
        HostName alice.example.com
        Port 8183
        User waseem

Host self
        HostName wsd.example.com
        Port 31337
        User waseemio


Теперь это просто:

andreika@hometelega:~$ ssh bob
andreika@hometelega:~$ ssh alice
andreika@hometelega:~$ ssh self


И да, конфигурационный файл позволяет вам также задать команды пробрасывания портов или запуска чего-то. Если захотите - читайте страницу справки ssh_config для деталей.

[ Редактирование Сбт Окт 23 2010, 05:11 ]
Наверх
ssh начало   ssh   linux   

 

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System
22cd68bd