autossh em segundo plano não funciona

12

Eu montei um túnel via autossh.

Isso funciona:

autossh -M 33201 -N -i myIdFile -R 33101:localhost:22 [email protected]

Eu gostaria de executar autossh em segundo plano. Parece fácil usando a -fopção

Isso não funciona, no entanto:

autossh -f -M 33201 -N -i myIdFile -R 33101:localhost:22 [email protected]

A execução automática é executada em segundo plano, mas a conexão ssh parece falhar sempre. Em / var / syslog, vejo várias ocorrências de:

autossh[3420]: ssh exited with error status 255; restarting ssh

O que estou fazendo de errado? Um palpite é que ele tem algo a ver com a autenticação via arquivo de chave. Como posso depurar isso (adicionar -v às opções ssh não parece registrar em nenhum lugar).

Edit: Eu tenho alguns logs ssh usando a opção -y

/usr/bin/ssh[3484]: debug1: Next authentication method: publickey
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_rsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_dsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_ecdsa
/usr/bin/ssh[3484]: debug1: No more authentication methods to try.
/usr/bin/ssh[3484]: fatal: Permission denied (publickey).
autossh[3469]: ssh exited with error status 255; restarting ssh

Parece que o autossh não aceita meu arquivo de identificação ( -i myIdFile) ao usar a opção -f. Por que é que?

(autossh 1.4c em Raspian)

henning77
fonte
Por que usar autossh? Você pode usar o systemd para o "reinício em falha". Criei uma essência com a minha solução: gist.github.com/guettli/…
guettli

Respostas:

29

Parece que quando o autossh cai para o plano de fundo (opção -f) ele está alterando o diretório de trabalho, o que significa que os caminhos relativos não funcionam mais. Ou mais específico: digitando o caminho absoluto do seu arquivo de identificação, você provavelmente terá êxito.

Recriei o cenário criando uma chave sem senha em um local não padrão:

~/$ mkdir test
~/$ cd test
~/test$ ssh-keygen -f test_id_rsa

Eu simplesmente apertei enter duas vezes para gerar uma chave que não é protegida por uma senha.

Copiei a nova chave no meu servidor (que atualmente permite a autenticação de senha):

~/test$ ssh-copy-id -i test_id_rsa user@server

Primeiro, confirmei que a chave estava trabalhando com ssh normal e depois usando autossh como você:

~/test$ ssh -i test_id_rsa user@server
~/test$ autossh -M 13000 -N -i test_id_rsa user@server
^C

Ambos funcionaram bem, então recriei o problema que você tinha:

~/test$ autossh -f -M 13000 -N -i test_id_rsa user@server

Isso não funcionou e o seguinte foi escrito para /var/log/syslog:

autossh [2406]: o ssh saiu prematuramente com o status 255; saída automática

Ao mudar o caminho do arquivo de chave para absoluto, funcionou:

~/test$ autossh -f -M 13000 -N -i /home/user/test/test_id_rsa user@server

Não há erros no /var/log/syslog.

jmidgren
fonte
incrível, isso funciona.
henning77
Você salvou meu dia!
Arno_v 7/07/2014
2
A opção -N é importante, caso contrário, você "ssh sairá com o status 0; sairá automaticamente". Obrigado!
user30747
Confirmado, eu também precisei adicionar o caminho ao arquivo "id_rsa" da seguinte maneira: autossh -M 19001 -fN -y -i /home/pi/.ssh/id_rsa (thanks @jmidgren)
Rich
4

Não sei o que está acontecendo com o -f, mas você também pode fazer o nhup:

nohup autossh -M 33201 -N -f -i myIdFile -R 33101:localhost:22 [email protected] &
Brian P
fonte
nohup funciona para mim, mesmo sem especificar o arquivo de chave.
Valadil
nohupTambém trabalhou para a execução autosshsob runita Alpine Linux
Stuart Cardall
0

Adicione os seguintes parâmetros ao SSH para ignorar "Tem certeza de que deseja continuar a conexão (sim / não)?"

-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

O comando final estaria no seguinte formato:

autossh -f -M $BASE_PORT -N -R $LOCAL_PORT:$LOCALHOST:$REMOTE_PORT $USER@$SERVER -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
vahid-dan
fonte
funciona para mim.
91119 bluebird_lboro
Não ative, a StrictHostKeyChecking=nomenos que esteja se conectando a um brinquedo efêmero conhecido - e esteja optando por ser preguiçoso.
Dolph