ssh
Прокинуть socks на удаленный хост
Можно добавить опцию -C
для сжатия трафика.ssh -D 9999 user@remote.host
Через socks-прокси
ssh -o ProxyCommand="nc -X 5 -x localhost:9999 %h %p" root@10.0.0.1
Проброс авторизации
Аналогичен связке с socks. Удобно в случае если hidden-host доступен только с gate-hostssh -o ProxyCommand="ssh -W %h:%p user@gate-host" user@hidden-host
Port Forwarding
-f go to background -N Не выполнять команд (не спавнить шелл) -R remote -L local
Вытащить порт наружу
Прокинуть локальный порт на удаленный хост, например из-за NAT.
Синтаксис: <remote ip>:<remote port>:<local ip>:<local port>
В данном случае ssh будет доступен на машине remote-host на 127.0.0.1:9999ssh -f -N -R 9999:127.0.0.1:22 user@remote-host
Чтобы забиндить на удаленной машине порт на внешний адрес необходимо в sshd_config
указатьGatewayPorts yes
В таком случае можно биндится на внешний адрес машины remote-hostssh -f -N -R 0.0.0.0:9999:127.0.0.1:22 user@remote-host
Можно так же пробросить пробросить порт соседней машины, например из локальной сетиssh -f -N -R 0.0.0.0:9999:192.168.1.1:22 user@remote-host
Втащить удаленный порт на локалхост
ssh -L [локальный_адрес:]локальный_порт:[удаленный_адрес]:удаленный_порт remote-host
AutoSSH
Для автоматического удаленного доступа к устройствам за NAT
На сервере создается юзер switch
без шелла, клиенты добавляются по ключам. У каждого клиента свой уникальный порт, который он форвардит.
Сервер для autossh
Создать юзера:useradd --create-home switch
Заменить шелл на nologin
:
switch:x:1001:1001::/home/switch:/bin/nologin
Разрешить авторизацию в /etc/shadow
:
Заменить это switch:!:........... На это switch:*:...........
Создать ключи:
mkdir /home/switch/.ssh ssh-keygen -t rsa -b 2048 -C "switch@autossh" -f /home/switch/.ssh/id_rsa cat /home/switch/.ssh/id_rsa.pub > /home/switch/.ssh/authorized_keys
Клиент autossh
Скопировать ключ:
cp id_rsa /home/REMOTE_DEVICE/.ssh/switch-autossh.key chmod go-rwx /home/REMOTE_DEVICE/.ssh/switch-autossh.key
Подключиться первый раз чтобы создался known_hosts
:
ssh -N -i ~/.ssh/switch-autossh.key switch@remote_server_ip
Настроить демон autossh:
# /etc/systemd/system/autossh.service # -------------------------------- [Unit] Description=Keeps a tunnel to zhovner.switch open After=ssh.service [Service] Environment=AUTOSSH_GATETIME=0 # -p [PORT] # -l [user] # -M 0 --> no monitoring # -N Just open the connection and do nothing (not interactive) # -R remote forwarding <remote ip>:<remote port>:<local ip>:<local port> # -R can be more than one ExecStart=/usr/bin/autossh -M 0 -q -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -p 222 -R 123.123.123.123:9122:127.0.0.1:22 -i /root/.ssh/switch-autossh.key switch@123.123.123.123 # Wait 30 seconds before start. Dirty hack to maximum portability because of After=network.target mess. ExecStartPre=/bin/sleep 30 ExecStop=killall -s KILL autossh RestartSec=5 Restart=always [Install] WantedBy=multi-user.target