Обучение

Обучение

Life-hack

4) TCP forwarding ssh-соединения

Иногда бывает нужно соединиться по ssh с сервером, который напрямую недоступен, а доступ возможен только по цепочке ssh-серверов (см. предыдущую главу). Теперь мы обладаем нужными знаниями чтобы сделать следующее:

host1# ssh -L 2222:localhost:2222 host2

host2# ssh -L 2222:host4:22 host3


Таким образом, на порту 2222 на «host1» у нас теперь есть форвардинг на порт SSH (22) на «host4». Можем соединиться:


host1# ssh -p 2222 localhost

host4# echo hello host4


Казалось бы, зачем это нужно? Например, вот зачем:

# копируем файл на host4

host1# scp -P 2222 /local/path/to/some/file localhost:/path/on/host4

# копируем файл с host4

host1# scp -P 2222 localhost:/path/on/host4 /local/path/to/some/file

# делаем еще один замечательный TCP forwarding на host4

host1# ssh -p 2222 -L 9999:localhost:5432 localhost

host1# psql -h localhost -p 9999 -U postgres

# обратите внимание, что порт для команды ssh задается ключем -p в нижнем регистре,

# а для команды scp -P в верхнем регистре

Ну и вообще, здорово что теперь «host4» так близко :)

Вывод: можно делать TCP forwarding большого уровня вложенности.

Замечания про RSA fingerprint

В некоторых случаях scp не отработает, пока не зайдете сначала через ssh -p 2222 localhost и не примете RSA fingerprint удаленного сервера.

Если пользуетесь одним и тем же портом (2222) для доступа к разным удаленным серверам, то будут ошибки RSA fingerprint, который остался от предыдущего сервера. Его нужно будет удалить из ~/.ssh/known_hosts.