Это более подробные шаги для тестирования или устранения неполадок в туннеле SSH. Вы можете использовать некоторые из них в скрипте. Я добавляю этот ответ, потому что мне пришлось устранять неполадки со связью между двумя приложениями после того, как они перестали работать. Просто найти процесс ssh было недостаточно, так как он все еще был там. И я не мог использовать nc -z
, потому что эта опция не была доступна в моем заклинании netcat.
Начнем с самого начала. Предположим, что есть машина, которая будет называться local с IP-адресом 10.0.0.1, а другая, называемая remote, с IP-адресом 10.0.3.12. Я добавлю эти имена хостов к приведенным ниже командам, чтобы было очевидно, где они выполняются.
Цель состоит в том, чтобы создать туннель, который будет перенаправлять TCP-трафик с адреса обратной связи на удаленной машине через порт 123 на локальную машину через порт 456. Это можно сделать с помощью следующей команды на локальной машине:
local:~# ssh -N -R 123:127.0.0.1:456 10.0.3.12
Чтобы убедиться, что процесс запущен, мы можем сделать:
local:~# ps aux | grep ssh
Если вы видите команду в выводе, мы можем продолжить. В противном случае убедитесь, что ключ SSH установлен на удаленном компьютере. Обратите внимание, что исключение имени пользователя перед удаленным IP-адресом заставляет ssh использовать текущее имя пользователя.
Далее мы хотим проверить, открыт ли туннель на удаленном компьютере:
remote:~# netstat | grep 10.0.0.1
Мы должны получить вывод, подобный этому:
tcp 0 0 10.0.3.12:ssh 10.0.0.1:45988 ESTABLISHED
Было бы неплохо на самом деле увидеть, что некоторые данные передаются от удаленного компьютера к хосту. Здесь на помощь приходит netcat. В CentOS его можно установить вместе с yum install nc
.
Сначала откройте прослушивающий порт на локальной машине:
local:~# nc -l 127.0.0.1:456
Затем выполните подключение на удаленном компьютере:
remote:~# nc 127.0.0.1 123
Если вы откроете второй терминал на локальном компьютере, вы увидите соединение. Что-то вроде этого:
local:~# netstat | grep 456
tcp 0 0 localhost.localdom:456 localhost.localdo:33826 ESTABLISHED
tcp 0 0 localhost.localdo:33826 localhost.localdom:456 ESTABLISHED
А еще лучше, наберите что-нибудь на пульте:
remote:~# nc 127.0.0.1 8888
Hallo?
anyone there?
Вы должны увидеть, как это отражается на локальном терминале:
local:~# nc -l 127.0.0.1:456
Hallo?
anyone there?
Туннель работает! Но что, если у вас есть приложение с именем appname, которое должно прослушивать порт 456 на локальном компьютере? Завершите nc с обеих сторон, затем запустите приложение. Вы можете проверить, что он прослушивает правильный порт с помощью это:
local:~# netstat -tulpn | grep LISTEN | grep appname
tcp 0 0 127.0.0.1:456 0.0.0.0:* LISTEN 2964/appname
Кстати, запуск той же команды на удаленном компьютере должен показать, что sshd прослушивает порт 127.0.0.1:123.
person
Nagev
schedule
03.11.2017