Как создать SSH подключение

И так, мы сгенерировали ssh ключи и настало время подключиться к серверу. Первое, что нужно сделать - это пробросить публичный ключи на сервер.

 ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
Вместо user вы подставляете логин вашего пользователя, а вместо server указываете хост или ip адрес удаленного сервера, к которому вы хотите подключиться. Если у вас ssh работает не по стандартном порту, то нужно дополнительно указать порт.
 ssh-copy-id -i ~/.ssh/id_rsa.pub '-p port user@server'
Где port - это порт, который слушает ваш ssh сервер

Второе, что нужно сделать перед подключением - это проверить, что ssh агент знает про ваши ключи. Для этого можно воспользоваться следующей командой:

 ssh-add -l
 2048 SHA256:FrcsHSW/ATlQzIhOGdU8oT/CqNJGeWZWgWYY0XA0yag igor-sverdlov@mail.ru (RSA)
Если нужного приватного ssh ключа нет или вы переносили ключи на другой сервер, то можно добавить ключ в агент выполнив данную команду:
 ssh-add ~/.ssh/id_rsa
 Identity added: ~/.ssh/id_rsa (~/.ssh/id_rsa)
При этом Вас попросят ввести пароль от ключа. Так же часто при отладке нужно понять какой fingerprint у данного ssh ключа. Для этого можно воспользоваться следующей командой:
 ssh-keygen -lf ~/.ssh/id_rsa.pub
 2048 SHA256:FrcsHSW/ATlQzIhOGdU8oT/CqNJGeWZWgWYY0XA0yag igor-sverdlov@mail.ru (RSA)

В большинстве случаев бывает удобно прокидывать ssh ключи автоматически на сервер. Для этого нужно создать конфигурационный файл на клиенте.

 touch ~/.ssh/config
 printf "Compression yes\nForwardAgent yes">> ~/.ssh/config
Чтобы посмотреть все доступные опции конфига можно выполнить команду:
 man ssh_config

Наконец, мы готовы выполнить команду ssh коннекта. Она выглядит так:

 ssh user@server
Если порт ssh коннекта отличается от стандартного, то его можно задать с помощью опции -p.
 ssh -p port user@server
Для проброса графического интерфейса можно использовать опцию -X.
 ssh -X user@server
Часто бывает удобно настроить через конфиг алиасы. Содержимое конфига ~/.ssh/config выглядит примерно так:
 Host dev
 Hostname server
 User user
 ForwardX11 yes
 Compression yes
 ForwardAgent yes
Теперь подключиться к серверу server под пользователем user можно с помощью такой команды
 ssh dev
Выполнить команду на удаленном сервере можно так:
 ssh user@server command
 Thu 06 Jan 2022 03:11:12 PM UTC
В данном примере использовалась команда date
Для проброски туннеля используется следующая команда:
 ssh -f -N -L local_port:endpoint_ip:endpoint_port user@server -p ssh_port
 # example
 ssh -f -N -L 3031:127.0.0.1:8080 217.14.247.114 -p 522
Где:
– local_port - локальный порт, запросы на который будут уходить на сервер server
– endpoint_ip - ip адрес или хост сервера конечной цели
– endpoint_port - порт конечной цели
– user - пользователь под которым будет происходить ssh коннект
– server - сервер через который будет прокинут туннель
– ssh_port - порт ssh подключения. Если используется дефолтный 22, то указывать не нужно

Таким образом в нашем примере все запросы на localhost:3031 уходят на сервер 217.14.247.114 по порту 522 и дальше перенаправляются на 127.0.0.1(то есть остаются на сервере 217.14.247.114) по порту 8080. Если вместо 127.0.0.1 указать другой хост, то запрос уйдет на соответствующий сервер.