sshd — Daemon OpenSSH
SINOPSIS
sshd [-46DdeGiqTtV] [-C connection_spec] [-c host_certificate_file] [-E log_file]
[-f config_file] [-g login_grace_time] [-h host_key_file] [-o option] [-p port] [-u len]
DESCRIÇÃO
sshd (Daemon OpenSSH) é o programa daemon para ssh(1). Ele fornece comunicações criptografadas seguras entre dois hosts não confiáveis em uma rede não segura.
sshd ouve por conexões de clientes. Normalmente, é iniciado durante a inicialização a partir de /etc/init.d/ssh.
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.
sshd pode ser configurado usando opções de linha de comando ou um arquivo de configuração (por padrão
sshd_config(5)); as opções de linha de comando substituem os valores especificados no arquivo de configuração. sshd
re lê seu arquivo de configuração quando recebe um sinal de hangup, SIGHUP, executando-se com
o nome e as opções com as quais foi iniciado, por exemplo, /usr/sbin/sshd.
As opções são as seguintes:
-4 Força sshd a usar endereços IPv4 apenas.
-6 Força sshd a usar endereços IPv6 apenas.
-C connection_spec
Especifica os parâmetros de conexão a serem usados para o modo de teste estendido -T. Se fornecido, qualquer diretiva Match no arquivo de configuração que se aplicaria é aplicada antes que a configuração seja gravada na saída padrão. Os parâmetros de conexão são fornecidos como pares de chave=valor e podem ser fornecidos em qualquer ordem, seja com várias opções -C ou como uma lista separada por vírgulas. As palavras-chave são “addr”, “user”, “host”, “laddr”, “lport” e “rdomain” e correspondem ao endereço de origem, usuário, nome de host de origem resolvido, endereço local, número da porta local e domínio de roteamento, respectivamente. Além disso, o sinalizador “invalid-user” (que não recebe um argumento de valor) pode ser especificado para simular uma conexão de um nome de usuário não reconhecido.
-c host_certificate_file
Especifica um caminho para um arquivo de certificado para identificar sshd durante a troca de chaves. O arquivo de certificado deve corresponder a um arquivo de chave de host especificado usando a opção -h ou a diretiva de configuração HostKey.
-D Quando esta opção é especificada, sshd não se separa e não se torna um daemon. Isso
permite fácil monitoramento de sshd.
-d Modo de depuração. O servidor envia saída de depuração detalhada para o erro padrão e não se coloca em segundo plano. O servidor também não fará fork(2) e processará apenas uma
conexão. Esta opção é destinada apenas para depuração do servidor. Várias opções -d aumentam o nível de depuração. O máximo é 3.
-E log_file
Adiciona logs de depuração ao arquivo log_file em vez do log do sistema.
-e
Escreve logs de depuração no erro padrão em vez do log do sistema.
-f config_file
Especifica o nome do arquivo de configuração. O padrão é /etc/ssh/sshd_config. sshd se recusa a iniciar se não houver um arquivo de configuração.
-G
Analisa e imprime o arquivo de configuração. Verifica a validade do arquivo de configuração, imprime a configuração efetiva para stdout e, em seguida, sai. Opcionalmente, as regras de Correspondência podem ser aplicadas especificando os parâmetros de conexão usando uma ou mais opções -C.
-g login_grace_time
Define o tempo limite para os clientes se autenticarem (padrão: 120 segundos). Se o cliente não conseguir autenticar o usuário dentro deste tempo, o servidor se desconecta e sai. Um valor de zero indica que não há limite.
-h host_key_file
Especifica um arquivo do qual uma chave de host é lida. Esta opção deve ser fornecida se sshd não for executado como root (já que os arquivos de chave de host normais geralmente não são legíveis por ninguém além de root). O padrão é /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key e /etc/ssh/ssh_host_rsa_key. É possível ter vários arquivos de chave de host para os diferentes algoritmos de chave de host.
-i
Especifica que sshd está sendo executado a partir de inetd(8).
-o option
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 existe uma flag de linha de comando separada. Para obter detalhes completos sobre as opções e seus valores, consulte sshd_config(5).
-p port
Especifica a porta na qual o servidor escuta as conexões (padrão: 22). Várias opções de porta são permitidas. As portas especificadas no arquivo de configuração com a opção Port são ignoradas quando uma porta de linha de comando é especificada. As portas especificadas usando a opção ListenAddress substituem as portas da linha de comando.
-q
Modo silencioso. Nada é enviado ao log do sistema. Normalmente, o início, a autenticação e o término de cada conexão são registrados.
-T
Modo de teste estendido. Verifica a validade do arquivo de configuração, imprime a configuração efetiva para stdout e, em seguida, sai. Opcionalmente, as regras de Correspondência podem ser aplicadas especificando os parâmetros de conexão usando uma ou mais opções -C. Isso é semelhante à flag -G, mas inclui os testes adicionais executados pela flag -t.
-t
Modo de teste. Verifica apenas a validade do arquivo de configuração e a sanidade das chaves. Isso é útil para atualizar sshd de forma confiável, pois as opções de configuração podem mudar.
-u len
Esta opção é usada para especificar o tamanho do campo na estrutura utmp que contém o nome do host remoto. Se o nome do host resolvido for maior que len, o valor decimal pontilhado será usado em vez disso. Isso permite que hosts com nomes de host muito longos que excedam este campo ainda sejam identificados de forma exclusiva. Especificar -u0 indica que apenas endereços decimais pontilhados devem ser colocados no arquivo utmp. -u0 também pode ser usado para impedir que sshd faça solicitações de DNS, a menos que o mecanismo de autenticação ou a configuração exija isso. Os mecanismos de autenticação que podem exigir DNS incluem HostbasedAuthentication e o uso de uma opção from="lista-de-padrões" em um arquivo de chave. As opções de configuração que exigem DNS incluem o uso de um padrão USER@HOST em AllowUsers ou DenyUsers.
-V Exibe o número da versão e sai.
AUTENTICAÇÃO
O daemon SSH do OpenSSH suporta apenas o protocolo SSH versão 2. Cada host possui uma chave específica do host, usada para identificar o host. Sempre que um cliente se conecta, o daemon responde com sua chave pública do host. O cliente compara a chave do host com seu próprio banco de dados para verificar se ela não foi alterada.
O segredo de encaminhamento é fornecido 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 cifra simétrica. O cliente seleciona o algoritmo de criptografia a ser usado entre aqueles 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 (MAC).
Finalmente, o servidor e o cliente entram em um diálogo de autenticação. O cliente tenta se autenticar usando autenticação baseada em host, autenticação de chave pública, autenticação de desafio-resposta ou autenticação por senha.
Independentemente do tipo de autenticação, a conta é verificada para garantir que ela esteja acessível. Uma conta não está acessível se estiver bloqueada, listada em DenyUsers ou se seu grupo estiver listado em DenyGroups. A definição de uma conta bloqueada depende do sistema. Algumas plataformas têm seu próprio banco de dados de contas (por exemplo, AIX) e algumas modificam o campo passwd ( ‘*LK*’ no Solaris e UnixWare, ‘*’ no HP-UX, contendo ‘Nologin’ no Tru64, um ‘*LOCKED*’ no início no FreeBSD e um ‘!’ no início na maioria dos Linuxes). Se houver uma exigência para desativar a autenticação por senha para a conta, permitindo ainda a autenticação por chave pública, o campo passwd deve ser definido para algo diferente desses valores (por exemplo, ‘NP’ ou ‘*NP*’ ).
Se o cliente se autenticar com sucesso, um diálogo para preparar a sessão é iniciado. Neste momento, o cliente pode solicitar coisas como alocar um pseudo-tty, encaminhar conexões X11, encaminhar conexões TCP ou encaminhar a conexão do agente de autenticação por meio do canal seguro.
Depois disso, o cliente solicita um shell interativo ou a execução de um comando não interativo, que o sshd executará por meio do shell do usuário usando sua opção -c. Os dois lados então entram no modo de sessão. Neste 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 para o terminal do usuário no lado do cliente.
Quando o programa do usuário termina e todas as conexões X11 e outras conexões encaminhadas são fechadas, o servidor envia o status de saída do comando para o cliente e os dois lados saem.
PROCESSO DE LOGIN
Quando um usuário faz login com sucesso, o sshd faz o seguinte:
Se o login for em um terminal (`tty`) e nenhum comando tiver sido especificado, imprime a hora do último login
e o conteúdo de `/etc/motd` (a menos que seja impedido no arquivo de configuração ou por `~/.hushlogin`; consulte a
seção “ARQUIVOS”).
Se o login for em um terminal (`tty`), registra a hora do login.
Verifica `/etc/nologin`; se existir, imprime o conteúdo e encerra (a menos que o usuário seja o `root`).
Altera para executar com privilégios de usuário normais.
Configura o ambiente básico.
Lê o arquivo `~/.ssh/environment`, se existir, e permite que os usuários alterem seu
ambiente. Consulte a opção `PermitUserEnvironment` em `sshd_config(5)`.
Altera para o diretório pessoal do usuário.
Se o arquivo `~/.ssh/rc` existir e a opção `PermitUserRC` em `sshd_config(5)` estiver definida, executa-o; caso contrário,
se o arquivo /etc/ssh/sshrc existir, executa-o; caso contrário, executa [xauth]({filename}../../xauth)(1). Os arquivos “rc” recebem
o protocolo X11 e o cookie na entrada padrão. Consulte “SSHRC”, abaixo.
Executa o shell ou comando do usuário. Todos os comandos são executados no shell de login do usuário, conforme
especificado no banco de dados de senhas do sistema.
SSHRC
Se o arquivo ~/.ssh/rc existir, o [sh]({filename}../../sh)(1) o executa após ler os arquivos de ambiente, mas antes de iniciar o shell ou comando do usuário. Ele não deve produzir nenhuma saída em stdout; em vez disso, deve usar
stderr. Se o encaminhamento X11 estiver em uso, ele receberá o par “proto cookie” em sua entrada padrão (e DISPLAY em seu ambiente). O script deve chamar [xauth]({filename}../../xauth)(1) porque o sshd não executará
xauth automaticamente para adicionar cookies X11.
O principal objetivo deste arquivo é executar quaisquer rotinas de inicialização que possam ser necessárias antes que o diretório pessoal do usuário se torne acessível; AFS é um exemplo específico desse tipo de ambiente.
Este arquivo provavelmente conterá algum código de inicialização seguido por algo semelhante a:
if read proto cookie && [ -n "$DISPLAY" ]; then
if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
# X11UseLocalhost=yes
echo add unix:`echo $DISPLAY |
cut -c11-` $proto $cookie
else
# X11UseLocalhost=no
echo add $DISPLAY $proto $cookie
fi | xauth -q fi
Se este arquivo não existir, /etc/ssh/sshrc é executado e, se este também não existir, xauth é
usado para adicionar o cookie.
FORMATO DO ARQUIVO AUTHORIZED_KEYS
`AuthorizedKeysFile` especifica os arquivos que contêm as chaves públicas para autenticação de chave pública; se
esta opção não for especificada, o padrão é `~/.ssh/authorized_keys` e `~/.ssh/authorized_keys2`.
Cada linha do arquivo contém uma chave (linhas vazias e linhas que começam com ‘#’ são ignoradas como comentários). As chaves públicas consistem nos seguintes campos separados por espaço: opções, tipo de chave, chave codificada em base64, comentário. O campo de opções é opcional. Os tipos de chave suportados são:
_
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
_
ssh-ed25519
ssh-rsa
O campo de comentário não é usado para nada (mas pode ser conveniente para o usuário identificar a chave).
Observe que as linhas neste arquivo podem ter várias centenas de bytes de comprimento (devido ao tamanho da codificação da chave pública), até um limite de 8 kilobytes, o que permite chaves RSA de até 16 kilobits. Você não vai querer digitá-las; em vez disso, copie os arquivos id_ecdsa.pub, id_ecdsa_sk.pub, id_ed25519.pub, id_ed25519_sk.pub ou id_rsa.pub e edite-os.
O sshd impõe um tamanho mínimo do módulo de chave RSA de 1024 bits.
As opções (se presentes) consistem em especificações de opção separadas por vírgula. Não são permitidos espaços, exceto dentro de aspas duplas. As seguintes especificações de opção são suportadas (observe que as palavras-chave de opção não diferenciam maiúsculas de minúsculas):
agent-forwarding
Habilita o encaminhamento do agente de autenticação, que foi desabilitado anteriormente pela opção restrict.
cert-authority
Especifica que a chave listada é uma autoridade de certificação (CA) que é confiável para validar certificados assinados para autenticação do usuário.
Os certificados podem codificar restrições de acesso semelhantes a essas opções de chave. Se estiverem presentes restrições de certificado e opções de chave, a união mais restritiva dos dois será aplicada.
command="comando"
Especifica que o comando é executado sempre que esta chave é usada para autenticação. O comando fornecido pelo usuário (se houver) é ignorado. O comando é executado em um pty se o cliente solicitar um pty; caso contrário, é executado sem um tty. Se um canal limpo de 8 bits for necessário, não se deve solicitar um pty ou especificar no-pty. Uma aspa pode ser incluída no comando, citando-a com uma barra invertida.
Esta opção pode ser útil para restringir certas 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 e/ou X11, a menos que sejam explicitamente proibidos, por exemplo, usando a opção de chave restrict.
O comando originalmente fornecido pelo cliente está disponível na variável de ambiente SSH_ORIGINAL_COMMAND. Observe que esta opção se aplica à execução de shell, comando ou subsistema. Observe também que este comando pode ser substituído por um diretiva ForceCommand em sshd_config(5).
Se um comando for especificado e um comando forçado for incorporado em um certificado usado para autenticação, o certificado será aceito apenas se os dois comandos forem idênticos.
environment="NOME=valor"
Especifica que a string deve ser adicionada ao ambiente ao fazer login usando esta chave. As variáveis de ambiente definidas desta forma substituem outros valores de ambiente padrão. Várias opções deste tipo são permitidas. O processamento de ambiente é desabilitado por padrão e é controlado pela opção PermitUserEnvironment.
expiry-time="timespec"
Especifica um horário após o qual a chave não será aceita. O horário pode ser especificado como uma data YYYYMMDD[Z] ou um horário YYYYMMDDHHMM[SS][Z]. As datas e horários serão interpretados no fuso horário do sistema, a menos que sejam seguidos por um caractere Z, caso em que serão interpretados no fuso horário UTC.
from="lista-de-padrões"
Especifica que, além da autenticação por chave pública, ou o nome canônico do host remoto ou seu endereço IP devem estar presentes na lista separada por vírgulas de padrões. Consulte PATTERNS em ssh_config(5) para obter mais informações sobre padrões.
Além da correspondência de curinga que pode ser aplicada a nomes de host ou endereços, uma seção from pode corresponder a endereços IP usando a notação CIDR endereço/comprimento.
O propósito desta opção é aumentar opcionalmente a segurança: a autenticação por chave pública por si só não confia na rede ou nos servidores de nomes ou em qualquer outra coisa (apenas na chave); no entanto, se alguém roubar a chave, a chave permite que um invasor faça login de qualquer lugar do mundo. Esta opção adicional torna o uso de uma chave roubada mais difícil (os servidores de nomes e/ou roteadores também teriam que ser comprometidos, além da chave).
no-agent-forwarding
Proíbe o encaminhamento do agente de autenticação quando esta chave é usada para autenticação.
no-port-forwarding
Proíbe o encaminhamento TCP quando esta chave é usada para autenticação. Quaisquer solicitações de encaminhamento de porta pelo cliente retornarão um erro. Isso pode ser usado, por exemplo, em conexão com a opção command.
no-pty
Impede a alocação de tty (uma solicitação para alocar um tty falhará).
no-user-rc
Desativa a execução de \~/.ssh/rc.
no-X11-forwarding
Proíbe o encaminhamento X11 quando esta chave é usada para autenticação. Quaisquer solicitações de encaminhamento X11 pelo cliente retornarão um erro.
permitlisten="[host:]porta"
Limita o encaminhamento de porta remota com a opção ssh(1) -R, de forma que ele só possa escutar no host (opcional) e na porta especificados. Os endereços IPv6 podem ser especificados colocando o endereço entre colchetes. Várias opções permitlisten podem ser aplicadas separadas por vírgulas. Os nomes de host podem incluir curingas, conforme descrito na seção PATTERNS em ssh_config(5). Uma especificação de porta de * corresponde a qualquer porta. Observe que a configuração de GatewayPorts pode restringir ainda mais os endereços de escuta. Observe que ssh(1) enviará um nome de host de “localhost” se um host de escuta não foi especificado quando o encaminhamento foi solicitado e que este nome é tratado de forma diferente dos endereços localhost explícitos “127.0.0.1” e “::1”.
permitopen="host:porta"
Limita o encaminhamento de porta local com a opção ssh(1) -L, de forma que ele só possa se conectar ao host e à porta especificados. Os endereços IPv6 podem ser especificados colocando o endereço entre colchetes. Várias opções permitopen podem ser aplicadas separadas por vírgulas. Não é realizada nenhuma correspondência de padrões ou pesquisa de nomes nos nomes de host especificados; eles devem ser nomes de host e/ou endereços literais. Uma especificação de porta de * corresponde a qualquer porta.
port-forwarding
Habilita o encaminhamento de porta que foi desabilitado anteriormente pela opção restrict.
principals="principals"
Em uma linha de cert-authority, especifica os principais permitidos para a autenticação de certificado como uma lista separada por vírgulas. Pelo menos um nome da lista deve aparecer na lista de principais do certificado para que o certificado seja aceito. Esta opção é ignorada para chaves que não são marcadas como signatários de certificados confiáveis usando a opção cert-authority.
pty Permite a alocação de terminal (tty) que foi desativada anteriormente pela opção restrict.
no-touch-required
Não exige a demonstração da presença do usuário para assinaturas feitas usando esta chave. Esta opção só faz sentido para os algoritmos de autenticação FIDO ecdsa-sk e ed25519-sk.
verify-required
Exige que as assinaturas feitas usando esta chave atestem que verificaram o usuário, por exemplo, por meio de um PIN. Esta opção só faz sentido para os algoritmos de autenticação FIDO ecdsa-sk e ed25519-sk.
restrict
Habilita todas as restrições, ou seja, desativa o encaminhamento de porta, agente e X11, além de desabilitar a alocação de terminal (PTY) e a execução de ~/.ssh/rc. Se forem adicionados recursos de restrição futuros aos arquivos authorized_keys, eles serão incluídos neste conjunto.
tunnel="n"
Força um dispositivo tun(4) no servidor. Sem esta opção, o próximo dispositivo disponível será usado se o cliente solicitar um túnel.
user-rc
Habilita a execução de ~/.ssh/rc, que foi desativada anteriormente pela opção restrict.
X11-forwarding
Permite o encaminhamento X11 que foi desativado anteriormente pela opção restrict.
Um exemplo de arquivo authorized_keys:
# Comentários são permitidos no início da linha. Linhas em branco são permitidas.
# Chave simples, sem restrições
ssh-rsa ...
# Comando forçado, desativa PTY e todo o encaminhamento
restrict,command="dump /home" ssh-rsa ...
# Restrição dos destinos de encaminhamento ssh -L
permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-rsa ...
# Restrição dos ouvintes de encaminhamento ssh -R
permitlisten="localhost:8080",permitlisten="[::1]:22000" ssh-rsa ...
# Configuração para encaminhamento de túnel
tunnel="0",command="sh /etc/netstart tun0" ssh-rsa ...
# Substituição da restrição para permitir a alocação de PTY
restrict,pty,command="nethack" ssh-rsa ...
# Permite chave FIDO sem exigir toque
no-touch-required _ ...
# Exige a verificação do usuário (por exemplo, PIN ou biometria) para chave FIDO
verify-required _ ...
# Confia na chave CA, permite toque-menos FIDO, se solicitado no certificado
cert-authority,no-touch-required,principals="user_a" ssh-rsa ...
FORMATO DO ARQUIVO SSH_KNOWN_HOSTS
Os arquivos /etc/ssh/ssh_known_hosts e ~/.ssh/known_hosts contêm as chaves públicas dos hosts 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 conectar a um host desconhecido, sua chave é adicionada ao arquivo por usuário.
Cada linha nestes arquivos contém os seguintes campos: marcador (opcional), nomes de host, tipo de chave, chave codificada em base64, comentário. Os campos são separados por espaços.
O marcador é opcional, mas se estiver presente, deve ser um de “@cert-authority”, para indicar que a linha contém uma chave de autoridade de certificação (CA), ou “@revoked”, para indicar que a chave contida na linha é revogada e nunca deve ser aceita. Apenas um marcador deve ser usado em uma linha de chave.
Hostnames é uma lista separada por vírgulas de padrões ('*' e '?' atuam como curingas); cada padrão é, por sua vez, correspondido ao nome do host. Quando o sshd está autenticando um cliente, como ao usar HostbasedAuthentication, este será o nome de host canônico do cliente. Quando ssh(1) está autenticando um servidor, este será o nome de host fornecido pelo usuário, o valor de ssh(1) HostkeyAlias, se especificado, ou o nome de host canônico do servidor se a opção ssh(1) CanonicalizeHostname foi usada.
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 que corresponda a outro padrão na linha. Um nome de host ou endereço pode ser opcionalmente colocado entre '[' e ']' e seguido por ':' e um número de porta não padrão.
Alternativamente, os nomes de host podem ser armazenados em uma forma hash, o que oculta os nomes de host e endereços caso o conteúdo do arquivo seja divulgado. Os nomes de host em hash começam com o caractere '|'. Apenas um nome de host em hash pode aparecer em uma única linha e nenhum dos operadores de negação ou curinga acima pode ser aplicado.
O tipo de chave e a chave codificada em base64 são retirados diretamente da chave do host; eles podem ser obtidos, por exemplo, de /etc/ssh/ssh_host_rsa_key.pub. O campo de comentário opcional continua até o final da linha e não é usado.
As linhas que começam com '#' e as linhas vazias são ignoradas como comentários.
Ao realizar a autenticação do host, a autenticação é aceita se qualquer linha correspondente tiver a chave correta; seja uma que corresponda exatamente ou, se o servidor tiver apresentado um certificado para autenticação, a chave da autoridade de certificação que assinou o certificado. Para que uma chave seja confiável como uma autoridade de certificação, ela deve usar o marcador "@cert-authority" descrito acima.
O arquivo de hosts conhecidos também fornece um recurso para marcar chaves como revogadas, por exemplo, quando se sabe que a chave privada associada foi roubada. As chaves revogadas são especificadas incluindo o marcador "@revoked" no início da linha da chave e nunca são aceitas para autenticação ou como autoridades de certificação, mas, em vez disso, produzirão um aviso de ssh(1) quando forem encontradas.
É permitido (mas não recomendado) ter várias linhas ou chaves de host diferentes para os mesmos nomes. Isso inevitavelmente acontecerá quando forem colocados no arquivo nomes de host curtos de diferentes domínios. É possível que os arquivos contenham informações conflitantes; a autenticação é aceita se informações válidas puderem ser encontradas em qualquer um dos arquivos.
Observe que as linhas nesses arquivos geralmente têm centenas de caracteres de comprimento e você definitivamente não deseja digitar as chaves do host manualmente. Em vez disso, gere-as usando um script, ssh-keyscan(1) ou pegando, por exemplo, /etc/ssh/ssh_host_rsa_key.pub e adicionando os nomes do host no início. ssh-keygen(1) também oferece alguma edição automatizada básica para ~/.ssh/known_hosts, incluindo a remoção de hosts que correspondem a um nome de host e a conversão de todos os nomes de host em suas representações hash.
Um exemplo de arquivo ssh_known_hosts:
# Comentários permitidos no início da linha
cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=
# Um nome de host com hash
|1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa
AAAA1234.....=
# Uma chave revogada
@revoked * ssh-rsa AAAAB5W...
# Uma chave de CA, aceita para qualquer host em *.mydomain.com ou *.mydomain.org
@cert-authority *.mydomain.org,*.mydomain.com ssh-rsa AAAAB5W...
ARQUIVOS
~/.hushlogin
Este arquivo é usado para suprimir a impressão do último horário de login e /etc/motd, se PrintLastLog e PrintMotd, respectivamente, estiverem habilitados. Não suprime a impressão do banner especificado por Banner.
~/.rhosts
Este arquivo é usado para autenticação baseada em host (veja ssh(1) para mais informações). Em algumas máquinas, este arquivo pode precisar ser legível mundialmente se o diretório inicial do usuário estiver em uma partição NFS, porque sshd o lê como root. Além disso, este arquivo deve ser de propriedade do usuário e não deve ter permissões de gravação para mais ninguém. A permissão recomendada para a maioria das máquinas é leitura/gravação para o usuário e não acessível por outros.
~/.shosts
Este arquivo é usado da mesma maneira que .rhosts, mas permite autenticação baseada em host sem permitir login com rlogin/rsh.
~/.ssh/
Este diretório é o local padrão para todas as configurações e informações de autenticação específicas do usuário. Não há nenhum requisito geral para manter todo o conteúdo deste diretório em segredo, mas as permissões recomendadas são leitura/gravação/execução para o usuário e não acessível por outros.
~/.ssh/authorized_keys
Lista as chaves públicas (ECDSA, Ed25519, RSA) que podem ser usadas para fazer login como este usuário. O formato deste arquivo é descrito acima. O conteúdo do arquivo não é altamente sensível, mas as permissões recomendadas são leitura/gravação para o usuário e não acessível por outros.
Se este arquivo, o diretório ~/.ssh ou o diretório inicial do usuário puderem ser gravados por outros usuários, o arquivo poderá ser modificado ou substituído por usuários não autorizados. Neste caso, sshd não permitirá que ele seja usado, a menos que a opção StrictModes tenha sido definida como “no”.
~/.ssh/environment
Este arquivo é lido no ambiente no login (se existir). Ele pode conter apenas linhas vazias, linhas de comentário (que começam com ‘#’) e linhas de atribuição no formato name=value. O arquivo deve ser gravável apenas pelo usuário; não precisa ser legível por mais ninguém. O processamento do ambiente está desabilitado por padrão e é controlado por meio da opção PermitUserEnvironment.
~/.ssh/known_hosts
Contém uma lista de chaves de host para todos os hosts nos quais o usuário fez login, que não estão presentes na lista de chaves de host do sistema. O formato deste arquivo é descrito acima. Este arquivo deve ser gravável apenas pelo root/proprietário e pode, mas não precisa, ser legível por todos.
~/.ssh/rc
Contém rotinas de inicialização a serem executadas antes que o diretório inicial do usuário se torne acessível. Este arquivo deve ser gravável apenas pelo usuário e não precisa ser legível por mais ninguém.
/etc/hosts.allow
/etc/hosts.deny
Os controles de acesso que devem ser aplicados pelos tcp-wrappers são definidos aqui. Mais detalhes são descritos em hosts_access(5).
/etc/hosts.equiv
Este arquivo é para autenticação baseada em host (veja ssh(1)). Ele deve ser gravável apenas pelo root.
/etc/ssh/moduli
Contém grupos Diffie-Hellman usados para o método de troca de chaves "Diffie-Hellman Group Exchange". O formato do arquivo é descrito em moduli(5). Se nenhum grupo utilizável for encontrado neste arquivo, grupos internos fixos serão usados.
/etc/motd
Veja motd(5).
/etc/nologin
Se este arquivo existir, sshd se recusará a permitir que qualquer pessoa, exceto root, faça login. O conteúdo do arquivo é exibido para qualquer pessoa que tente fazer login, e as conexões de usuários que não são root são recusadas. O arquivo deve ser legível por todos.
/etc/ssh/shosts.equiv
Este arquivo é usado exatamente da mesma forma que hosts.equiv, mas permite a autenticação baseada em host sem permitir o login com rlogin/rsh.
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_rsa_key
Esses arquivos contêm as partes privadas das chaves de host. Esses arquivos devem ser de propriedade apenas do root, legíveis apenas pelo root e não acessíveis a outros. Observe que sshd não inicia se esses arquivos forem acessíveis para o grupo/todos.
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub
Esses arquivos contêm as partes públicas das chaves de host. Esses arquivos devem ser legíveis por todos, mas graváveis apenas pelo root. Seu conteúdo deve corresponder às respectivas partes privadas. Esses arquivos não são realmente usados para nada; eles são fornecidos para conveniência do usuário, para que seu conteúdo possa ser copiado para os arquivos de hosts conhecidos. Esses arquivos são criados usando ssh-keygen(1).
/etc/ssh/ssh_known_hosts
Lista de chaves de host conhecidas do sistema. Este arquivo deve ser preparado pelo administrador do sistema para conter as chaves de host públicas de todas as máquinas da organização. O formato deste arquivo é descrito acima. Este arquivo deve ser gravável apenas pelo root/proprietário e deve ser legível por todos.
/etc/ssh/sshd_config
Contém dados de configuração para sshd. O formato do arquivo e as opções de configuração são descritos em sshd_config(5).
/etc/ssh/sshrc
Semelhante a \~/.ssh/rc, pode ser usado para especificar inicializações globais específicas da máquina no momento do login. Este arquivo deve ser gravável apenas pelo root e deve ser legível por todos.
/run/sshd
diretório usado pelo sshd durante a separação de privilégios na fase pré-autenticação. O diretório não deve conter nenhum arquivo e deve ser de propriedade do root e não deve ser gravável por grupo ou por outros usuários.
/run/sshd.pid
Contém o ID do processo do sshd que está aguardando conexões (se houver vários daemons em execução simultaneamente para diferentes portas, isso contém o ID do processo do daemon que foi iniciado por último). O conteúdo deste arquivo não é confidencial; pode ser lido por qualquer usuário.
VEJA TAMBÉM
scp(1), sftp(1), ssh(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), ssh-keyscan(1), chroot(2), hosts_access(5), moduli(5), sshd_config(5), inetd(8), sftp-server(8)
AUTORES
O OpenSSH é um derivado do lançamento original e gratuito do ssh 1.2.12 de Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt e Dug Song removeram muitos bugs, adicionaram novos recursos e criaram o OpenSSH. Markus Friedl contribuiu com o suporte para as versões 1.5 e 2.0 do protocolo SSH. Niels Provos e Markus Friedl contribuíram com o suporte para a separação de privilégios.