
Pequena biblioteca portátil e incorporável de cliente e servidor SSHv2 em C com SCP, SFTP, encaminhamento de portas e troca de chaves pós-quântica para sistemas embarcados e IoT.
Servidor SSH Embarcável da wolfSSL Manual do wolfSSH
O wolfSSH depende do wolfCrypt, encontrado como parte do wolfSSL. A seguir está a configuração mais simples do wolfSSL para habilitar o wolfSSH.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
Em alguns sistemas, o comando opcional ldconfig é necessário após a instalação.
Para usar a função de geração de chaves no wolfSSH, o wolfSSL precisará ser
configurado com keygen: --enable-keygen.
Ao usar certificados X.509 para autenticação de usuário, o wolfSSL deve ser
compilado com TLS habilitado. O wolfSSH usa o sistema de gerenciamento de
certificados do wolfSSL para X.509, incluindo consultas OCSP. Para permitir
OCSP, adicione --enable-ocsp à configuração do wolfSSL.
Se a maior parte do código do wolfSSL não for desejada, o wolfSSL pode ser
configurado com a opção somente criptografia: --enable-cryptonly.
Opções adicionais de compilação para o wolfSSL estão localizadas no capítulo dois do manual do wolfSSH.
A partir do diretório de código-fonte do wolfSSH, execute:
$ ./autogen.sh (se clonado do GitHub)
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
O script autogen.sh só precisa ser executado na primeira vez após clonar
o repositório. Se você já o executou ou está usando código de um
arquivo de código-fonte, você deve ignorá-lo.
Para compilar no Windows com o Visual Studio, consulte o arquivo "ide/winvs/README.md".
NOTA: Em dispositivos com recursos limitados, o DEFAULT_WINDOW_SZ pode precisar
ser definido para um tamanho menor. Ele também pode ser aumentado em casos de uso
em desktop para ajudar com transferências de arquivos grandes. Por padrão, os canais são definidos para receber
até 128kB de dados antes de enviar uma mensagem de ajuste de janela do canal. Um
exemplo de definição de 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 > 2GB compilando
com CFLAGS=-D_FILE_OFFSET_BITS=64.
O diretório examples contém um echoserver ao qual qualquer cliente deve
ser capaz de se conectar. A partir do terminal, execute:
$ ./examples/echoserver/echoserver -f
A opção -f habilita o modo somente echo. A partir de outro terminal, execute:
$ ssh jill@localhost -p 22222
Quando solicitada a senha, digite "upthehill". O servidor enviará um banner pré-definido ao 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 tem o echo local habilitado. O echoserver não está sendo um terminal adequado, então a tradução CR/LF não funcionará como esperado.
Os seguintes caracteres de controle acionarão ações especiais no echoserver:
Após clonar o repositório, certifique-se de tornar as chaves privadas de teste
somente leitura para o usuário, caso contrário o ssh dirá para você fazer isso.
$ 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 echoserver de exemplo pode ser feita com uma senha ou chave pública. Para usar uma senha, a linha de comando:
$ ssh -p 22222 USER@localhost
Onde os pares de USER e senha são:
jill:upthehill
jack:fetchapail
Para usar autenticação por chave pública, use a linha de comando:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Onde o USER pode ser gretel ou hansel, e TYPE é rsa ou
ecc.
Tenha em mente que o echoserver tem várias contas falsas em sua
função de callback wsUserAuth(). (jack, jill, hansel e gretel) Quando
o suporte a shell está habilitado, essas contas falsas não funcionarão. Elas
não existem no arquivo passwd do sistema. Os usuários serão autenticados,
mas o servidor dará erro porque eles não existem no sistema. Você
pode adicionar seu próprio nome de usuário à lista de senhas ou chaves públicas no
echoserver. Essa conta será logada em um shell iniciado pelo
echoserver com os privilégios do usuário que executa o echoserver.
O wolfSSH vem empacotado com algumas ferramentas de exemplo para fins de teste e para demonstrar interoperabilidade com outras implementações de SSH.
O echoserver é o cavalo de batalha do wolfSSH. Originalmente, ele só permitia autenticar uma das contas pré-definidas e repetia os caracteres digitados nele. Ao habilitar o suporte a 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 de callback de autenticação de usuário atualizada 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 client estabelece uma conexão com um servidor SSH. Em seu modo mais simples, ele envia a string "Hello, wolfSSH!" ao servidor, imprime a resposta e então sai. Com a opção de pseudo terminal, o client será um cliente real.
A ferramenta client 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 pseudo 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 listener para encaminhamento de porta local ou solicita um listener para encaminhamento de porta remoto. Após uma conexão, a ferramenta é encerrada.
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: