Questão Como posso suprimir o / etc / issue sem perder mensagens de erro?


É possível dizer ao cliente ssh para não imprimir os conectos de /etc/issue para stdout ao se conectar a um host remoto, mas para imprimir qualquer outra mensagem de diagnóstico (por exemplo, erro)?

Usando ssh -q ou ter LogLevel quiet dentro ~/.ssh/config suprime o /etc/issue impressão, mas também desligar mensagens de erro. eu tentei touching ~/.hushlogin também - isso pára /etc/motd sendo impresso, mas não afeta /etc/issue.

A solução mais óbvia é apenas para remover /etc/issue, mas a política da empresa determina que o arquivo esteja lá com avisos terríveis sobre o acesso não autorizado. Isso não é negociável. Infelizmente, eu tenho um monte de scripts que são executados em alguns hosts via ssh, e os arquivos de log são a) muito grandes eb) cheios de legalês. Como muitas coisas são executadas sem supervisão, não quero perder nenhuma mensagem de erro impressa.


4


origem


Essas legalses devem ser estáticas. Eu sugiro uma remoção automática do log usando o awk ou sed. Eu vou com uma solução amanhã. - Archemar


Respostas:


sim Adicione um arquivo ~/.ssh/config contendo:

LogLevel ERROR

O OpenSSH exibe o conteúdo de /etc/issue do servidor remoto. Esse parâmetro desabilita essa exibição. Muito útil quando a empresa remota Git repo como um aviso de segurança irritante.

o ssh config manpage diz:

LogLevel

Dá o nível de detalhamento que é usado ao registrar mensagens   de ssh (1). Os valores possíveis são: QUIET, FATAL, ERROR,    INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2e DEBUG3.   O padrão é INFO. DEBUG e DEBUG1 são equivalentes.    DEBUG2 e DEBUG3 cada um especifica níveis mais altos de saída detalhada.


Truque extra Adicione também no seu ~/.ssh/config

Host *
     StrictHostKeyChecking no

Isso evita outra mensagem irritante. Ao se conectar a um novo host, a seguinte pergunta de segurança bloqueia a conexão em andamento. O truque acima sempre assume yes. No entanto, na prática, você sempre responde yesnão é?

The authenticity of host 'newhostname (11.222.33.44)' can't be established.
RSA key fingerprint is aa:bb:cc:dd:ee:ff:11:22:33:44:55:66:77:88:99:00.
Are you sure you want to continue connecting (yes/no)?

6





Nem meu host local do OS X nem meu servidor Ubuntu /etc/issue quando eu ssh em (nem com um shell nem com a execução de um comando remoto), então eu não posso reproduzir o seu problema. Vou tentar isso da memória.

Se você não se importar em fazer duas conexões, poderá fazer isso:

num_lines="$(ssh yourhost 'cat /etc/issue' | wc -l)";
ssh yourhost 'your real command here' | tail +$(($num_lines / 2 + 1));

O primeiro comando ssh causará /etc/issue para ser impresso duas vezes (uma vez pelo sistema, uma vez por cat), então o número de linhas será o dobro do /etc/issue. A saída do segundo comando mostrará apenas a saída daquele número de linhas mais um.


3





Se o seu log tiver um monte de sessões anexadas em um arquivo, você pode fazer com que o seu script faça algo como echo START LOGGING antes de executar outros comandos e, em seguida, echo END LOGGING antes de desconectar e, em seguida, usar um script de shell simples (usando sed ou awk) retire todo o conteúdo do arquivo entre END e START (ou seja, o clichê antes de cada login).

EDITAR:

Agora vejo que você não está registrando, mas em vez disso procurando mensagens na janela - eu recomendo criar logs e varrer os logs em vez de confiar apenas na saída da janela do terminal - isso é muito mais flexível e permite retornar erros das sessões anteriores se necessário.


3





Não.

Quando o host envia de volta linhas de texto, como o cliente SSH pode saber quais linhas vieram do arquivo / etc / issue do host, e quais são as mensagens mais interessantes? Não pode.


0



pode saber porque / etc / issue é impresso antes de você executar qualquer comando, ele não aparecerá no meio de uma sessão, nunca - Justin Smith


Você pode definir isso na linha de comando com:

ssh -o loglevel=ERROR

Se você estiver usando rsync (como foi o caso para mim quando pesquisando esse problema), você pode fazer isso especificando a linha de comando de conexão ssh para rsync como:

rsync -e 'ssh -o loglevel=ERROR'


0