Eu configurei o servidor remoto que se conecta automaticamente ao servidor local via autossh
:
sudo autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /root/.ssh/nopwd -R 6666:localhost:22 @ -p &
Eu configurei o comando autossh acima em rc.local:
#!/bin/sh -e
#
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o
"PasswordAuthentication=no" -i /root/.ssh/nopwd -R 6666:localhost:22
<username>@<domain> -p portNumber &
exit 0
Então eu criei um serviço rc-local:
sudo vi /etc/systemd/system/rc-local.service
#add the following lines
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Então eu disse ao serviço para ser executado em cada inicialização:
sudo systemctl enable rc-local
O servidor remoto se conecta via ssh na inicialização e mantém a conexão com sucesso:
Netstat shows: tcp 0 0 0.0.0.0:6666 0.0.0.0:* LISTEN 22542/sshd
Agora eu tento conectar-me ao 6666 no meu servidor local:
ssh [email protected] -p 6666
Eu recebo o seguinte erro: ssh_exchange_identification: read: Conexão redefinida pelo peer
Quando eu ssh com a opção -vvv, obtenho os seguintes registros de depuração:
# ssh -vvv 127.0.0.1 -p 6666
OpenSSH_7.6p1 Debian-2, OpenSSL 1.0.2l 25 May 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: resolving "127.0.0.1" port 6666
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 6666.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /root/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6p1 Debian-2
ssh_exchange_identification: read: Connection reset by peer
No entanto, se eu matar a conexão ssh em ambas as extremidades (local e remota). E então restabeleça a conexão ssh reversa do servidor remoto:
autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /root/.ssh/nopwd -R 6666:localhost:22 @ -p portNumber &
O túnel é construído com sucesso. E eu posso então ssh através de 127.0.0.1 -p 6666 com sucesso.
ssh [email protected] -p 6666 Last login: Sun Dec 17 10:50:29 2017 from ::1
Eu preciso deste trabalho na inicialização sem intervenção manual. O que estou fazendo errado?
Tags ssh networking debian tunnel linux