Manual Wolfssh do servidor SSH incorporado de Wolfssl
Wolfssh depende do WolfCrypt, encontrado como parte do Wolfssl. A seguir, é a configuração mais simples do WolfSSL para ativar o Wolfssh.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
Em alguns sistemas, o comando ldconfig opcional é necessário após a instalação.
Para usar a função de geração de chaves em Wolfssh, o WolfSSL precisará ser configurado com Keygen: --enable-keygen .
Ao usar os certificados X.509 para autenticação do usuário, o WolfSSL deve ser criado com o TLS ativado. O Wolfssh usa o sistema de gerenciador de certificados da WolfSSL para X.509, incluindo pesquisas OCSP. Para permitir o OCSP, adicione --enable-ocsp à configuração do WolfSSL.
Se a maior parte do código WolfSSL não desejar, o WolfSSL poderá ser configurado com a opção Somente Crypto: --enable-cryptonly .
As opções de construção adicionais para o WolfSSL estão localizadas no capítulo dois. do manual Wolfssh.
Do diretório de origem Wolfssh, execução:
$ ./autogen.sh
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
O script autogen.sh só deve ser executado na primeira vez após a clonagem do repositório. Se você já o executou ou está usando código de um arquivo de origem, você deve ignorá -lo.
Para construir no Windows com o Visual Studio, consulte o arquivo "IDE/WINVS/README.MD".
NOTA: Nos dispositivos restringidos pelo recurso, o DEFAULT_WINDOW_SZ pode precisar ser definido como um tamanho mais baixo. Também pode ser aumentado nos casos de uso da área de trabalho para ajudar com grandes transferências de arquivos. Por padrão, os canais estão definidos para receber até 128kb de dados antes de enviar uma mensagem de ajuste da janela do canal. Um exemplo de definir um tamanho de janela para novos canais seria o seguinte ./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
Para plataformas Linux de 32 bits, você pode adicionar suporte para arquivos> 2 GB, complicando com CFLAGS=-D_FILE_OFFSET_BITS=64 .
Os examples de diretório contém um ecosista ao qual qualquer cliente deve ser capaz de se conectar. Da execução do terminal:
$ ./examples/echoserver/echoserver -f
A opção -f permite o modo apenas eco. De outra execução do terminal:
$ ssh jill@localhost -p 22222
Quando solicitado uma senha, digite "UpThehill". O servidor enviará um banner enlatado para o cliente:
wolfSSH Example Echo Server
Os caracteres digitados no cliente serão ecoados na tela pelo servidor. Se os caracteres forem ecoados duas vezes, o cliente possui eco local ativado. O eChoserver não está sendo um terminal adequado, portanto a tradução CR/LF não funcionará conforme o esperado.
Os seguintes caracteres de controle desencadearão ações especiais no Echoserver:
Após clonar o repositório, certifique-se de fazer com que as teclas privadas testes somente leitura para o usuário, caso contrário, ssh dirá para você fazê-lo.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
A autenticação contra o exemplo de ecoServer pode ser feita com uma senha ou chave pública. Para usar uma senha, a linha de comando:
$ ssh -p 22222 USER@localhost
Onde estão os pares de usuário e senha:
jill:upthehill
jack:fetchapail
Para usar a autenticação de chave pública, use a linha de comando:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Onde o usuário pode ser gretel ou hansel e o tipo é rsa ou ecc .
Lembre -se de que o Echoserver possui várias contas falsas em sua função de retorno de chamada wsUserAuth() . (Jack, Jill, Hansel e Gretel) Quando o suporte da concha é ativado, essas contas falsas não funcionam. Eles não existem no arquivo passwd do sistema. Os usuários se autenticarão, mas o servidor errará porque não existem no sistema. Você pode adicionar seu próprio nome de usuário à senha ou lista de teclas públicas no Echoserver. Essa conta será registrada em um shell iniciado pelo ECHOSERVER com os privilégios do usuário executando o ECHOSERVER.
O Wolfssh vem embalado com algumas ferramentas de exemplo para fins de teste e para demonstrar interoperabilidade com outras implementações do SSH.
O ecoServer é o cavalo de batalha de Wolfssh. Originalmente, ele apenas permitia autenticar uma das contas enlatadas e repetia os caracteres digitados nela. Ao ativar o suporte do shell, ele pode gerar um shell de usuário. Ele precisará de um nome de usuário real na máquina e uma função atualizada de retorno de chamada de autenticação do usuário para validar as credenciais. O eChoserver também pode lidar com conexões SCP e SFTP.
A ferramenta Echoserver aceita as seguintes opções de linha de comando:
-1 exit after a single (one) connection
-e expect ECC public key from client
-E use ECC private key
-f echo input
-p <num> port to accept on, default 22222
-N use non-blocking sockets
-d <string> set the home directory for SFTP connections
-j <file> load in a public key to accept from peer
O cliente estabelece uma conexão com um servidor SSH. No seu modo mais simples, ele envia a string "Hello, Wolfssh!" Para o servidor, imprime a resposta e depois sai. Com a opção Pseudo do terminal, o cliente será um cliente real.
A ferramenta cliente aceita as seguintes opções de linha de comando:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-e use sample ecc key for user
-i <filename> filename for the user's private key
-j <filename> filename for the user's public key
-x exit after successful connection without doing
read/write
-N use non-blocking sockets
-t use psuedo terminal
-c <command> executes remote command and pipe stdin/stdout
-a Attempt to use SSH-AGENT
A ferramenta Portfwd estabelece uma conexão com um servidor SSH e configura um ouvinte para encaminhamento de porta local ou solicita um ouvinte para encaminhamento de porta remota. Após uma conexão, a ferramenta termina.
A ferramenta Portfwd aceita as seguintes opções de linha de comando:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-F <host> host to forward from, default 0.0.0.0
-f <num> host port to forward from (REQUIRED)
-T <host> host to forward to, default to host
-t <num> port to forward to (REQUIRED)
O SCPClient, Wolfscp, estabelece uma conexão com um servidor SSH e copia os arquivos especificados de ou para a máquina local.
A ferramenta SCPClient aceita as seguintes opções de linha de comando:
-H <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-L <from>:<to> copy from local to server
-S <from>:<to> copy from server to local
O SFTPClient, Wolfsftp, estabelece uma conexão com um servidor SSH e permite a navegação de diretórios, obtendo e colocando arquivos, fabricando e removendo diretórios, etc.
A ferramenta SFTPClient aceita as seguintes opções de linha de comando:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-d <path> set the default local path
-N use non blocking sockets
-e use ECC user authentication
-l <filename> local filename
-r <filename> remote filename
-g put local filename as remote filename
-G get remote filename as local filename
O Wolfssh inclui suporte ao lado do servidor para o SCP, que inclui suporte para ambos os arquivos de cópia 'para' o servidor e copiando arquivos 'de' O servidor. Tanto o arquivo único quanto a cópia do diretório recursivo são suportados com os retornos de chamada de envio e recebimento padrão.
Para compilar o Wolfssh com o suporte do SCP, use a opção de compilação --enable-scp ou defina WOLFSSH_SCP :
$ ./configure --enable-scp
$ make
Para obter detalhes completos de uso e implementação da API, consulte o Manual do Usuário do Wolfssh.
O servidor Wolfssh Exemplo foi configurado para aceitar uma solicitação SCP e é compilado por padrão ao compilar a biblioteca Wolfssh. Para iniciar o servidor de exemplo, execute:
$ ./examples/server/server
Os comandos SCP padrão podem ser usados no lado do cliente. A seguir, alguns exemplos, onde scp representa o cliente SSH que você está usando.
Para copiar um único arquivo para o servidor, usando o exemplo padrão do usuário "Jill":
$ scp -P 22222 <local_file> [email protected]:<remote_path>
Para copiar o mesmo arquivo único para o servidor, mas com registro de data e hora e no modo detalhado:
$ scp -v -p -P 22222 <local_file> [email protected]:<remote_path>
Para copiar recursivamente um diretório para o servidor:
$ scp -P 22222 -r <local_dir> [email protected]:<remote_dir>
Para copiar um único arquivo do servidor para o cliente local:
$ scp -P 22222 [email protected]:<remote_file> <local_path>
Para copiar recursivamente um diretório do servidor para o cliente local:
$ scp -P 22222 -r [email protected]:<remote_dir> <local_path>
O Wolfssh fornece suporte para encaminhamento de portas. Isso permite que o usuário configure um túnel criptografado para outro servidor, onde o cliente SSH escuta em um soquete e encaminhe conexões nesse soquete para outro soquete no servidor.
Para compilar Wolfssh com suporte de encaminhamento de porta, use a opção de compilação --enable-fwd ou defina WOLFSSH_FWD :
$ ./configure --enable-fwd
$ make
Para obter detalhes completos de uso e implementação da API, consulte o Manual do Usuário do Wolfssh.
A ferramenta de exemplo portfwd criará um canal de estilo "direto-tcpip". Essas instruções assumem que você tem o servidor do OpenSSH em execução em segundo plano com o encaminhamento de porta ativado. Este exemplo encaminha a porta para o cliente WolfSSL para o servidor como aplicativo. Ele pressupõe que todos os programas sejam executados na mesma máquina em terminais diferentes.
src/wolfssl$ ./examples/server/server
src/wolfssh$ ./examples/portfwd/portfwd -p 22 -u <username>
-f 12345 -t 11111
src/wolfssl$ ./examples/client/client -p 12345
Por padrão, o servidor WolfSSL ouve na porta 11111. O cliente está configurado para tentar se conectar à porta 12345. O portfwd faz login como usuário "nome de usuário", abre um ouvinte na porta 12345 e se conecta ao servidor na porta 11111. Os pacotes são roteados para trás e para trás entre o cliente e o servidor. "Olá, Wolfssl!"
A fonte do Portfwd fornece um exemplo sobre como configurar e usar o suporte para encaminhamento de porta no Wolfssh.
O eChoserver lidará com o encaminhamento local e remoto da porta. Para se conectar com a ferramenta SSH, usando uma das seguintes linhas de comando. Você pode executar uma das linhas de comando SSH de qualquer lugar:
src/wolfssl$ ./examples/server/server
src/wolfssh$ ./examples/echoserver/echoserver
anywhere 1$ ssh -p 22222 -L 12345:localhost:11111 jill@localhost
anywhere 2$ ssh -p 22222 -R 12345:localhost:11111 jill@localhost
src/wolfssl$ ./examples/client/client -p 12345
Isso permitirá o encaminhamento da porta entre o cliente WolfSSL e o servidor, como no exemplo anterior.
O Wolfssh fornece suporte lateral ao servidor e do cliente para a versão 3 do SFTP. Isso permite ao usuário configurar uma conexão criptografada para gerenciar sistemas de arquivos.
Para compilar o Wolfssh com o suporte ao SFTP, use a opção de compilação --enable-sftp ou defina WOLFSSH_SFTP :
$ ./configure --enable-sftp
$ make
Para obter detalhes completos de uso e implementação da API, consulte o Manual do Usuário do Wolfssh.
O cliente SFTP criado está localizado nos exemplos de diretório/ sftpclient/ e o exemplo de ecoServer atua como um servidor SFTP.
src/wolfssh$ ./examples/sftpclient/wolfsftp
Uma lista completa de comandos suportados pode ser vista com a digitação de "ajuda" após uma conexão.
wolfSSH sftp> help
Commands :
cd <string> change directory
chmod <mode> <path> change mode
get <remote file> <local file> pulls file(s) from server
ls list current directory
mkdir <dir name> creates new directory on server
put <local file> <remote file> push file(s) to server
pwd list current path
quit exit
rename <old> <new> renames remote file
reget <remote file> <local file> resume pulling file
reput <remote file> <local file> resume pushing file
<crtl + c> interrupt get/put cmd
Um exemplo de conexão com outro sistema seria
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
O exemplo do exemplo de Wolfssh agora pode bifurcar um shell para o usuário que tenta fazer login. Atualmente, isso foi testado apenas no Linux e MacOS. O arquivo ecoserver.c deve ser modificado para que as credenciais do usuário no retorno de chamada de autenticação do usuário ou o retorno de chamada de autenticação do usuário precisa ser alterado para verificar a senha fornecida.
Para compilar Wolfssh com suporte de shell, use a opção de compilação --enable-shell ou defina WOLFSSH_SHELL :
$ ./configure --enable-shell
$ make
Para experimentar essa funcionalidade, você pode usar o exemplo de ecos e cliente. Em um terminal, faça o seguinte para iniciar o servidor:
$ ./examples/echoserver/echoserver -P <user>:junk
E em outro terminal, faça o seguinte para iniciar o Exemplo de cliente:
$ ./examples/client/client -t -u <user> -P junk
Observe que <user> deve ser o nome de usuário do usuário atual que está conectado.
Por padrão, o Echoserver tentará iniciar um shell. Para usar o comportamento de teste de eco, dê ao ecosá a opção da linha de comando -f .
$ ./examples/echoserver/echoserver -f
Para usar o recurso Shell com o WolfssShd Add --enable-sshd no seu comando de configuração e use o seguinte comando:
$ sudo ./apps/wolfsshd/wolfsshd -D -h keys/gretel-key-ecc.pem -p 11111
Se reclamar de um arquivo sshd_config ruim, basta copiar para outro arquivo e remover a linha ofensiva que se reclama e use o parâmetro -f de linha de comando para apontar para o novo arquivo.
Você pode se conectar ao servidor wolfsshd com SSH:
$ ssh <user>@localhost -p 11111
Observe que <user> deve ser o nome de usuário do usuário atual que está conectado.
O Wolfssh agora suporta o CURVE25519 para troca de chaves. Para ativar esse suporte, basta compilar o WolfSSL com o suporte ao Wolfssh e Curve25519.
$ cd wolfssl
$ ./configure --enable-wolfssh --enable-curve25519
Depois de construir e instalar o WolfSSL, você pode simplesmente configurar sem opções.
$ cd wolfssh
$ ./configure
O cliente e o servidor Wolfssh negociarão automaticamente usando o CURVE25519.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
O Wolfssh agora suporta o algoritmo pós-Quantum ML-DSA (também conhecido como Kyber). Ele usa o conjunto de parâmetros KYBER512 e é hibridado com ECDHE sobre a curva ECC P-256.
Para usar esta troca de chaves, você deve criar e instalar o WolfSSL no seu sistema. Aqui está um exemplo de uma configuração eficaz:
$ ./configure --enable-wolfssh --enable-experimental --enable-kyber
Depois disso, basta configurar e construir Wolfssh como de costume:
$ ./configure
$ make all
O cliente e o servidor Wolfssh negociarão automaticamente usando o Kyber512 hibridado com o ECDHE sobre a curva ECC do P-256.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
No lado do cliente, você verá a seguinte saída:
Servidor disse: Olá, Wolfssh!
Se você deseja ver a intero-operabilidade com o Fork of OpenSSH da OpenQAuntumsAfe, você pode criar e executar o garfo enquanto o ecoServer estiver em execução. Baixe o lançamento daqui:
https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
O seguinte é suficiente para construção e execução:
$ tar xmvf openssh-OQS-OpenSSH-snapshot-2021-08.tar.gz
$ cd openssh-OQS-OpenSSH-snapshot-2021-08/
$ ./configure --with-liboqs-dir=/usr/local
$ make all
$ ./ssh -o"KexAlgorithms=ecdh-nistp256-kyber-512r3-sha256-d00@openquantumsafe.org"
-o"PubkeyAcceptedAlgorithms +ssh-rsa"
-o"HostkeyAlgorithms +ssh-rsa"
jill@localhost -p 22222
Nota: Quando solicitado, digite a senha que é "UpThehill".
Você pode digitar uma linha de texto e, quando pressionar Enter, a linha será ecoada de volta. Use Ctrl-C para encerrar a conexão.
O Wolfssh pode aceitar os certificados X.509 no lugar de apenas chaves públicas ao autenticar um usuário.
Para compilar o Wolfssh com o suporte X.509, use a opção de compilação --enable-certs ou defina WOLFSSH_CERTS :
$ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
$ make
Para este exemplo, estamos desativando a verificação do FPKI como o certificado incluído para "Fred" não possui as extensões FPKI necessárias. Se o sinalizador Wolfssh_no_fpki for removido, você poderá ver o certificado ser rejeitado.
Para fornecer um certificado raiz da CA para validar o certificado de um usuário, forneça ao ecosá a opção da linha de comando -a .
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
O eChoserver e o cliente têm um usuário falso chamado "Fred" cujo certificado será usado para autenticação.
Um exemplo de conexão de ecoServer / cliente usando o Certificado de Exemplo Fred-Cert.der seria:
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem -K fred:./keys/fred-cert.der
$ ./examples/client/client -u fred -J ./keys/fred-cert.der -i ./keys/fred-key.der
O Wolfssh vem com um daemon do servidor e uma ferramenta de shell da linha de comando. Confira o diretório de aplicativos para obter mais informações.