Skip to main content

Tudo sobre o comando Linux / Unix: sshd

How to customize SSH port in Linux/Unix/AIX | SSH service installation/configuration | sshd (Pode 2025)

How to customize SSH port in Linux/Unix/AIX | SSH service installation/configuration | sshd (Pode 2025)
Anonim

Nome

sshd - daemon OpenSSH SSH

Sinopse

sshd -deiqtD46 -b bits -f config_file -g login_grace_time -h host_key_file -k key_gen_time -o opção -p porta -você len

Descrição

sshd (SSH Daemon) é o programa daemon para ssh (1). Juntos, esses programas substituem rlogin e rshe forneça comunicações criptografadas seguras entre dois hosts não confiáveis ​​em uma rede insegura. Os programas destinam-se a ser tão fáceis de instalar e usar quanto possível.

sshd é o daemon que ouve conexões de clientes. Normalmente é iniciado na inicialização de /etc/rc Ele bifurca um novo daemon para cada conexão de entrada. Os daemons bifurcados lidam com troca de chaves, criptografia, autenticação, execução de comandos e troca de dados. Esta implementação desshd suporta ambas as versões 1 e 2 do protocolo SSH simultaneamente.

Versão do Protocolo SSH 1

Cada host tem uma chave RSA específica do host (normalmente 1024 bits) usada para identificar o host. Além disso, quando o daemon é iniciado, ele gera uma chave RSA do servidor (normalmente 768 bits). Esta chave é normalmente regenerada a cada hora se tiver sido usada e nunca é armazenada no disco.

Sempre que um cliente se conecta, o daemon responde com suas chaves públicas de host e servidor. O cliente compara a chave do host RSA com seu próprio banco de dados para verificar se ele não foi alterado. O cliente gera um número aleatório de 256 bits. Ele criptografa esse número aleatório usando a chave do host e a chave do servidor e envia o número criptografado para o servidor. Ambos os lados usam esse número aleatório como uma chave de sessão que é usada para criptografar todas as comunicações posteriores na sessão. O restante da sessão é criptografado usando uma codificação convencional, atualmente Blowfish ou 3DES, com o 3DES sendo usado por padrão. O cliente seleciona o algoritmo de criptografia para usar daqueles oferecidos pelo servidor.

Em seguida, o servidor e o cliente entram em um diálogo de autenticação. O cliente tenta se autenticar usando a autenticação .rhosts, a autenticação .rhosts combinada com a autenticação de host RSA, a autenticação de resposta a desafio RSA ou a autenticação baseada em senha.

A autenticação Rhosts é normalmente desativada porque é fundamentalmente insegura, mas pode ser ativada no arquivo de configuração do servidor, se desejado. A segurança do sistema não é melhorada, a menosrshdrlogind e o rexecd está desabilitado (desabilitando assim o rlogin e o rsh na máquina).

Versão 2 do Protocolo SSH

A versão 2 funciona de forma semelhante: cada host tem uma chave específica do host (RSA ou DSA) usada para identificar o host. No entanto, quando o daemon é iniciado, ele não gera uma chave do servidor. A segurança direta é fornecida por meio de um acordo de chave Diffie-Hellman. Este acordo de chave resulta em uma chave de sessão compartilhada.

O restante da sessão é criptografado usando uma codificação simétrica, atualmente AES de 128 bits, Blowfish, 3DES, CAST128, Arcfour, AES de 192 bits ou AES de 256 bits. O cliente seleciona o algoritmo de criptografia para usar daqueles oferecidos pelo servidor. Além disso, a integridade da sessão é fornecida por meio de um código de autenticação de mensagem criptográfica (hmac-sha1 ou hmac-md5).

A versão 2 do protocolo fornece um método de autenticação de usuário de chave pública (PubkeyAuthentication) ou de host do cliente (HostbasedAuthentication), autenticação de senha convencional e métodos baseados em resposta a desafio.

Execução de Comando e Encaminhamento de Dados

Se o cliente autenticar-se com êxito, será inserida uma caixa de diálogo para preparar a sessão. Neste momento, o cliente pode solicitar coisas como a alocação de uma pseudo-tty, o encaminhamento de conexões X11, o encaminhamento de conexões TCP / IP ou o encaminhamento da conexão do agente de autenticação pelo canal seguro.

Finalmente, o cliente solicita um shell ou a execução de um comando. Os lados entram no modo de sessão. Nesse modo, qualquer um dos lados pode enviar dados a qualquer momento e esses dados são encaminhados para / do shell ou comando no lado do servidor e o terminal do usuário no lado do cliente.

Quando o programa do usuário termina e todos os X11 encaminhados e outras conexões foram fechadas, o servidor envia o status de saída do comando para o cliente e ambos os lados saem.

sshd pode ser configurado usando opções de linha de comando ou um arquivo de configuração. Opções de linha de comando substituem os valores especificados no arquivo de configuração.

sshd releia seu arquivo de configuração quando recebe um sinal de desligamento,SIGHUP executando-se com o nome que foi iniciado como, por exemplo, / usr / sbin / sshd

As opções são as seguintes:

-b bits

Especifica o número de bits na chave do servidor da versão 1 do protocolo efêmero (padrão 768).

-d

Modo de depuração. O servidor envia saída de depuração detalhada para o log do sistema e não se coloca em segundo plano. O servidor também não funcionará e processará apenas uma conexão. Esta opção destina-se apenas à depuração do servidor. Várias opções -d aumentam o nível de depuração. O máximo é 3.

-e

Quando esta opção é especificada,sshd irá enviar a saída para o erro padrão em vez do log do sistema.

-f arquivo de configuração

Especifica o nome do arquivo de configuração. O padrão é / etc / ssh / sshd_configsshdrecusa-se a iniciar se não houver arquivo de configuração.

-g login_grace_time

Dá o tempo de espera para os clientes se autenticarem (padrão 120 segundos). Se o cliente não conseguir autenticar o usuário dentro desse intervalo de segundos, o servidor desconectará e sairá.Um valor de zero indica sem limite.

-h host_key_file

Especifica um arquivo a partir do qual uma chave do host é lida. Esta opção deve ser dada sesshd não é executado como root (já que os arquivos normais da chave do host normalmente não são legíveis por ninguém além de root). O padrão é / etc / ssh / ssh_host_key para a versão de protocolo 1 e / etc / ssh / ssh_host_rsa_key e / etc / ssh / ssh_host_dsa_key para a versão de protocolo 2. É possível ter vários arquivos de chave de host para as diferentes versões de protocolo e chave de host algoritmos.

-Eu

Especifica quesshd está sendo executado a partir do inetd.sshd normalmente não é executado a partir do inetd porque precisa gerar a chave do servidor antes de poder responder ao cliente, e isso pode levar dezenas de segundos. Os clientes teriam que esperar muito se a chave fosse regenerada todas as vezes. No entanto, com tamanhos de chave pequenos (por exemplo, 512)sshd de inetd pode ser viável.

-k key_gen_time

Especifica com que frequência a chave do servidor da versão 1 do protocolo efêmero é regenerada (padrão, 3600 segundos ou uma hora). A motivação para regenerar a chave com bastante frequência é que a chave não é armazenada em nenhum lugar e, após cerca de uma hora, torna-se impossível recuperar a chave para descriptografar as comunicações interceptadas, mesmo que a máquina seja quebrada ou fisicamente capturada. Um valor zero indica que a chave nunca será regenerada.

-o opção

Pode ser usado para fornecer opções no formato usado no arquivo de configuração. Isso é útil para especificar opções para as quais não há um sinalizador de linha de comando separado.

-p porta

Especifica a porta na qual o servidor atende conexões (padrão 22). Várias opções de porta são permitidas. As portas especificadas no arquivo de configuração são ignoradas quando uma porta de linha de comando é especificada.

-q

Modo silencioso. Nada é enviado para o log do sistema. Normalmente, o início, a autenticação e a finalização de cada conexão são registrados.

-t

Modo de teste. Apenas verifique a validade do arquivo de configuração e a integridade das chaves. Isso é útil para atualizarsshd de forma confiável, pois as opções de configuração podem mudar.

-você len

Esta opção é usada para especificar o tamanho do campo noutmp estrutura que contém o nome do host remoto. Se o nome do host resolvido for maior que len o valor decimal pontilhado será usado no lugar. Isso permite que hosts com nomes de host muito longos que excedem esse campo ainda sejam identificados de maneira exclusiva. Especificando -u0 indica que apenas endereços decimais pontuados devem ser colocados no arquivo utmp. -u0 também é usado para evitarsshd de fazer solicitações de DNS, a menos que o mecanismo de autenticação ou a configuração exija isso. Mecanismos de autenticação que podem exigir DNS incluemRhostsAuthenticationRhostsRSAAuthentication HostAssentedAuthentication e usando umfrom = pattern-listopção em um arquivo de chave. As opções de configuração que exigem DNS incluem o uso de um USER @ HOSTpattern emAllowUsers ouDenyUsers

-D

Quando esta opção é especificadasshd não se separará e não se tornará um daemon. Isso permite fácil monitoramento desshd

-4

Forçassshd para usar apenas endereços IPv4.

-6

Forçassshd para usar apenas endereços IPv6.

Arquivo de configuração

sshd lê dados de configuração de / etc / ssh / sshd_config (ou o arquivo especificado com -f na linha de comando). O formato do arquivo e as opções de configuração estão descritos em sshd_config5.

Processo de Login

Quando um usuário efetua login com sucesso,sshd faz o seguinte:

  1. Se o login estiver em um tty e nenhum comando tiver sido especificado, o último horário de login e / etc / motd serão impressos (a menos que seja evitado no arquivo de configuração ou por $ HOME / .hushlogin, consulte a seção Sx FILES).
  2. Se o login estiver em um tty, registra o tempo de login.
  3. Verifica / etc / nologin se existir, imprime o conteúdo e sai (a menos que seja root).
  4. Alterações para executar com privilégios normais de usuário.
  5. Configura o ambiente básico.
  6. Lê o $ HOME / .ssh / environment se ele existir e os usuários podem alterar seu ambiente. Veja oPermitUserEnvironment opção em sshd_config5.
  7. Alterações no diretório inicial do usuário.
  8. Se $ HOME / .ssh / rc existir, executa-o; else se o / etc / ssh / sshrc existir, o executa; caso contrário, executa o xauth. Os arquivos `` rc '' recebem o protocolo de autenticação X11 e o cookie na entrada padrão.
  9. Executa o shell ou comando do usuário.

Formato de Arquivo Authorized_Keys

$ HOME / .ssh / authorized_keys é o arquivo padrão que lista as chaves públicas que são permitidas para autenticação RSA na versão de protocolo 1 e para autenticação de chave pública (PubkeyAuthentication) na versão de protocolo 2.AutorizadoKeysFile pode ser usado para especificar um arquivo alternativo.

Cada linha do arquivo contém uma chave (linhas vazias e linhas iniciando com um '#' são ignoradas como comentários). Cada chave pública RSA consiste nos seguintes campos, separados por espaços: opções, bits, expoente, módulo, comentário. Cada chave pública do protocolo versão 2 consiste em: opções, tipo de chave, chave codificada em base64, comentário. O campo de opções é opcional; sua presença é determinada pelo fato de a linha começar com um número ou não (o campo de opções nunca começa com um número). Os campos bits, expoente, módulo e comentário fornecem a chave RSA para a versão de protocolo 1; o campo de comentário não é usado para nada (mas pode ser conveniente para o usuário identificar a chave). Para a versão de protocolo 2, o tipo de chave é `` ssh-dss '' ou `` ssh-rsa ''

Observe que as linhas nesse arquivo geralmente têm várias centenas de bytes (devido ao tamanho da codificação da chave pública). Você não quer digitá-los; em vez disso, copie o arquivo identity.pub id_dsa.pub ou id_rsa.pub e edite-o.

sshd aplica um tamanho de módulo de chave RSA mínimo para o protocolo 1 e chaves do protocolo 2 de 768 bits.

As opções (se presentes) consistem em especificações de opções separadas por vírgulas. Nenhum espaço é permitido, exceto entre aspas duplas. As seguintes especificações de opções são suportadas (observe que as palavras-chave da opção não diferenciam maiúsculas de minúsculas):

from = pattern-list

Especifica que, além da autenticação de chave pública, o nome canônico do host remoto deve estar presente na lista de padrões separada por vírgulas (`* 'e`?' Servem como curingas). A lista também pode conter padrões negados prefixando-os com `! ' ; se o nome do host canônico corresponder a um padrão negado, a chave não será aceita. O propósito desta opção é opcionalmente aumentar a segurança: a autenticação de chave pública por si só não confia na rede ou nos servidores de nomes ou qualquer coisa (mas a chave); no entanto, se alguém roubar a chave de alguma forma, a chave permitirá que um intruso faça login em qualquer lugar do mundo. Essa opção adicional dificulta o uso de uma chave roubada (servidores de nomes e / ou roteadores teriam que ser comprometidos além de apenas a chave).

comando = comando

Especifica que o comando é executado sempre que essa chave é usada para autenticação. O comando fornecido pelo usuário (se houver) é ignorado. O comando é executado em um arquivo se o cliente solicitar um pty; caso contrário, é executado sem um tty. Se for necessário um canal limpo de 8 bits, não é necessário solicitar um arquivo ou especificarnão-pty Uma citação pode ser incluída no comando, citando-a com uma barra invertida. Essa opção pode ser útil para restringir determinadas chaves públicas para executar apenas uma operação específica. Um exemplo pode ser uma chave que permite backups remotos, mas nada mais. Observe que o cliente pode especificar o encaminhamento TCP / IP e / ou X11, a menos que seja explicitamente proibido. Observe que essa opção se aplica à execução de shell, comando ou subsistema.

environment = NAME = value

Especifica que a cadeia deve ser incluída no ambiente ao efetuar login usando essa chave. As variáveis ​​de ambiente definidas dessa maneira substituem outros valores de ambiente padrão. Várias opções deste tipo são permitidas. O processamento do ambiente é desativado por padrão e é controlado por meio doPermitUserEnvironment opção. Esta opção é automaticamente desativada seUseLogin está ativado.

encaminhamento sem porta

Proibe o encaminhamento de TCP / IP quando essa chave é usada para autenticação. Qualquer solicitação de encaminhamento de porta pelo cliente retornará um erro. Isso pode ser usado, por exemplo, em conexão com ocomando opção.

no-X11-forwarding

Proibe o encaminhamento do X11 quando essa chave é usada para autenticação. Quaisquer solicitações de encaminhamento X11 pelo cliente retornarão um erro.

nenhum agente de encaminhamento

Proíbe o encaminhamento do agente de autenticação quando essa chave é usada para autenticação.

não-pty

Impede a alocação tty (uma solicitação para alocar uma pty falhará).

permitopen = host: port

Limitar local`` ssh -L '' encaminhamento de porta de tal forma que só pode se conectar ao host e porta especificados. Endereços IPv6 podem ser especificados com uma sintaxe alternativa: host / port Múltiplo permitir opções podem ser aplicadas separadas por vírgulas. Nenhuma correspondência de padrão é executada nos nomes de host especificados, eles devem ser domínios ou endereços literais.

Exemplos

1024 33 12121 … 312314325 [email protected]

de = "*. niksula.hut.fi,! pc.niksula.hut.fi" 1024 35 23 … 2334 ylo @ niksula

command = "dump / home", não-pty, no-port-forwarding 1024 33 23 … 2323 backup.hut.fi

permitopen = "10.2.1.55:80", permitopen = "10.2.1.56:25" 1024 33 23 … 2323

Formato de arquivo Ssh_Known_Hosts

Os arquivos / etc / ssh / ssh_known_hosts e $ HOME / .ssh / known_hosts contêm chaves públicas de host para todos os hosts conhecidos. O arquivo global deve ser preparado pelo administrador (opcional) e o arquivo por usuário é mantido automaticamente: sempre que o usuário se conecta a partir de um host desconhecido, sua chave é adicionada ao arquivo por usuário.

Cada linha nesses arquivos contém os seguintes campos: hostnames, bits, expoente, módulo, comentário. Os campos são separados por espaços.

Hostnames são uma lista de padrões separados por vírgula ('*' e '?' Agem como curingas); cada padrão, por sua vez, é comparado com o nome do host canônico (ao autenticar um cliente) ou contra o nome fornecido pelo usuário (ao autenticar um servidor). Um padrão também pode ser precedido por `! ' para indicar negação: se o nome do host corresponder a um padrão negado, ele não será aceito (por essa linha) mesmo se corresponder a outro padrão na linha.

Bits, expoente e módulo são obtidos diretamente da chave do host RSA; eles podem ser obtidos, por exemplo, em /etc/ssh/ssh_host_key.pub O campo de comentário opcional continua até o final da linha e não é usado.

Linhas iniciando com # e linhas vazias são ignoradas como comentários.

Ao executar a autenticação do host, a autenticação é aceita se qualquer linha correspondente tiver a chave correta. É assim permitido (mas não recomendado) ter várias linhas ou chaves de host diferentes para os mesmos nomes. Isso acontecerá inevitavelmente quando formas curtas de nomes de host de diferentes domínios forem colocadas no arquivo. É possível que os arquivos contenham informações conflitantes; A autenticação é aceita se informações válidas puderem ser encontradas em qualquer arquivo.

Observe que as linhas nesses arquivos têm normalmente centenas de caracteres e você definitivamente não deseja digitar as chaves do host manualmente. Em vez disso, gere-os por um script ou tomando /etc/ssh/ssh_host_key.pub e adicionando os nomes de host na frente.

Exemplos

closenet, …, 130.233.208.41 1024 37 159 … 93 closenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ….. =

Veja também

scp (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, módulo (5), sshd_config5, sftp-server8

T. Ylinen T. Kivinen M. Saarinen T. Rinne S. Lehtinen "Arquitetura de protocolo SSH" draft-ietf-secsh-architecture-12.txt Janeiro de 2002 material em andamento

M. Friedl N. Provos W. A. ​​Simpson "Diffie-Hellman Group Exchange para o protocolo SSH Transport Layer" rascunho-ietf-secsh-dh-group-exchange-02.txt Janeiro de 2002 material em andamento

Importante: Use o homem comando ( % homem ) para ver como um comando é usado em seu computador particular.