Установка и настройка ssh

Установка

Пакет должен быть установлен как на клиенте, так и сервере.

sudo pacman -S openssh

На сервере запустить и включить сервис в автостарт.

sudo systemctl start sshd
sudo systemctl enable sshd

Настройка на клиенте

Генерация ключей

ssh-keygen -t rsa -b 4096 -C "ctlos@protonmail.com"
# или так
ssh-keygen -t rsa -q -N '' -f ~/.ssh/id_rsa

Ключи упадут в ~/.ssh.

Отправка ключа на сервер

ssh-copy-id username@remote_host

Или так. Копируем ключ на сервер.

cat .ssh/id_rsa.pub | ssh bibo@192.168.1.35 'mkdir -p ~/.ssh && cat >> .ssh/authorized_keys'

Настройка конфига

nano ~/.ssh/config

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

Host *
    #ForwardAgent yes
    #ForwardX11 yes
    #ForwardX11Trusted yes

Host bibo
    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes
    HostName 198.157.18.18
    Port 223
    User bibo

Блок с Host * задает глобальные настройки для всех серверов.

Данный блок с Host bibo конкретно под сервер.

  • Host: может быть любой, для вашего удобства.
  • Строки c Forward: включаем X11Forwarding.
  • Дальше ip, port, user (понятно).

Настройка на сервере

Файл конфигурации тут: /etc/ssh/sshd_config.

Запрещаем авторизацию от root, можно не править, по умолчанию так.

PermitRootLogin no

Если правим, то укажем кому можно.

AllowUsers bibo boba

Отключение авторизации по паролю.

PasswordAuthentication no

Укажем в конфиге файл авторизации.

AuthorizedKeysFile  .ssh/authorized_keys

Права как на клиенте так и на сервере.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
chown -R $USER ~/.ssh

Перезапустить сервис.

sudo systemctl restart sshd

X11Forwarding на сервере

Снять комментарии и привести строки в вид, в файле /etc/ssh/sshd_config.

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no

Перезапустить сервис.

sudo systemctl restart sshd

При запуске через sudo, если ошибка cannot open display: xxx-xx:10.0, то скопировать файл авторизации в /root.

sudo cp -r ~/user_name/.Xauthority /root

Проброс портов

Через ssh можно пробрасывать порты в обе стороны и даже строить связки, мосты. См. https://unix.stackexchange.com/a/118650.

Npm пакет для проброса портов localtunnel.

  • 199.199.199.199 IP адрес сервера в интернете
  • 127.0.0.1 IP локальной машины, localhost

Просмотр активных портов, утилита ss в пакете yay -S iproute2.

ss -tulpn

ss -h

Проброс с сервера

ssh -N -L 5001:127.0.0.1:5000 root@199.199.199.199
  • 5000: порт на сервере который мы хотим видеть в локальной сети.
  • 5001: локальный порт который пришел с сервера.
  • -N говорит повесить в фоновом режиме, завершение соединения по ctrl+c.

Проброс с локалки

Сначала пробрасываем на сервер.

ssh -f -N -R 2222:127.0.0.1:22 root@199.199.199.199
  • 22: локальный порт который пришел на сервер.
  • 2222: порт на сервере который можно использовать для подключения к машине, которая может быть за NAT.
  • -N говорит повесить в фоновом режиме, завершение соединения по ctrl+c.
  • -f создает стабильное соединение и завершает комманду, опустите этот флаг, если хотите держать в фоне это соединение.

Теперь подключаемся к серверу.

ssh root@199.199.199.199

И с сервера уже идем на машину порт которой пробросили. В данном примере 22 порт, соответственно на машине к которой хочем подключиться должен быть включен sshd с разрешением к подключению.

ssh -p 2222 username@127.0.0.1

Если вы собираетесь пробросить на сервер отличный от ssh порт, например 8080, то обязательно пропишите в конфиге sshd GatewayPorts yes.

sudo nano /etc/ssh/sshd_config

GatewayPorts yes

sudo systemctl restart sshd

Отредактировать на GitHub