Wolfssl의 임베드 가능한 SSH 서버 Wolfssh 매뉴얼
Wolfssh는 Wolfssl의 일부로 발견되는 Wolfcrypt에 의존합니다. 다음은 Wolfssh를 활성화하기위한 Wolfssl의 가장 간단한 구성입니다.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
일부 시스템에서는 설치 후 선택적 LDConfig 명령이 필요합니다.
Wolfssh의 주요 생성 함수를 사용하려면 Wolfssl은 keygen : --enable-keygen 으로 구성해야합니다.
사용자 인증에 X.509 인증서를 사용하는 경우 WolfSSL을 TLS를 활성화하여 구축해야합니다. Wolfssh는 OCSP 조회를 포함하여 X.509에 WolfSSL의 인증서 관리자 시스템을 사용합니다. OCSP를 허용하려면 --enable-ocsp WolfSSL 구성에 추가하십시오.
대부분의 WolfSSL 코드가 필요하지 않은 경우 WolfSSL은 --enable-cryptonly 전용 옵션으로 구성 할 수 있습니다.
WolfSSL의 추가 빌드 옵션은 2 장에 있습니다. Wolfssh 매뉴얼의.
Wolfssh 소스 디렉토리 실행에서 :
$ ./autogen.sh
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
autogen.sh 스크립트는 저장소를 클로닝 한 후 처음으로 만 실행해야합니다. 이미 실행했거나 소스 아카이브에서 코드를 사용하는 경우 건너 뛸 수 있습니다.
Visual Studio가있는 Windows 아래에서 구축하려면 "IDE/WINVS/ReadME.MD"파일을 참조하십시오.
참고 : 자원 제한 장치에서 DEFAULT_WINDOW_SZ 는 더 낮은 크기로 설정해야 할 수도 있습니다. 대규모 파일 전송을 돕기 위해 데스크탑 사용 사례에서도 증가 할 수 있습니다. 기본적으로 채널 창 조정 메시지를 보내기 전에 채널이 최대 128kb의 데이터를 수신하도록 설정됩니다. 새 채널의 창 크기를 설정하는 예는 다음과 같습니다 ./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
32 비트 리눅스 플랫폼의 경우 CFLAGS=-D_FILE_OFFSET_BITS=64 불평하여 파일> 2GB에 대한 지원을 추가 할 수 있습니다.
디렉토리 examples 에는 모든 클라이언트가 연결할 수있는 Echoserver가 포함되어 있습니다. 터미널 실행에서 :
$ ./examples/echoserver/echoserver -f
옵션 -f 에코 전용 모드를 활성화합니다. 다른 터미널 실행에서 :
$ ssh jill@localhost -p 22222
암호가 표시되면 "UptheHill"을 입력하십시오. 서버는 통조림 배너를 클라이언트에게 보냅니다.
wolfSSH Example Echo Server
클라이언트에 입력 한 문자는 서버에 의해 화면에 반향됩니다. 캐릭터가 두 번 반향되면 클라이언트에는 로컬 에코가 활성화되어 있습니다. Echoserver는 적절한 터미널이 아니므로 CR/LF 번역이 예상대로 작동하지 않습니다.
다음 제어 문자는 Echoserver에서 특수 작업을 트리거합니다.
저장소를 복제 한 후에는 사용자를 위해 개인 키 테스트를 읽으십시오. 그렇지 않으면 ssh 를 수행하도록 지시합니다.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
예제 Echoserver에 대한 인증은 비밀번호 또는 공개 키로 수행 할 수 있습니다. 암호를 사용하려면 명령 줄 :
$ ssh -p 22222 USER@localhost
사용자 및 비밀번호 쌍의 위치 :
jill:upthehill
jack:fetchapail
공개 키 인증을 사용하려면 명령 줄을 사용하십시오.
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
사용자가 gretel 또는 hansel 될 수 있고 유형은 rsa 또는 ecc 입니다.
Echoserver는 wsUserAuth() 콜백 함수에 몇 가지 가짜 계정이 있습니다. (Jack, Jill, Hansel 및 Gretel) 쉘 지원이 활성화되면이 가짜 계정은 작동하지 않습니다. 시스템의 Passwd 파일에는 존재하지 않습니다. 사용자는 인증하지만 서버는 시스템에 존재하지 않기 때문에 오류가 발생합니다. Echoserver의 비밀번호 또는 공개 키 목록에 자신의 사용자 이름을 추가 할 수 있습니다. 이 계정은 Echoserver를 실행하는 사용자의 권한과 함께 Echoserver가 시작한 쉘에 로그인됩니다.
Wolfssh에는 테스트 목적으로 몇 가지 예제 도구가 제공되고 다른 SSH 구현과의 상호 운용성을 보여줍니다.
Echoserver는 Wolfssh의 주변입니다. 원래는 통조림 계정 중 하나를 인증 할 수 있었고 입력 된 문자를 반복 할 수있었습니다. 쉘 지원을 활성화하면 사용자 쉘을 스폰 할 수 있습니다. 자격 증명을 검증하려면 컴퓨터의 실제 사용자 이름과 업데이트 된 사용자 인증 콜백 기능이 필요합니다. Echoserver는 SCP 및 SFTP 연결을 처리 할 수도 있습니다.
Echoserver 도구는 다음 명령 줄 옵션을 수락합니다.
-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
클라이언트는 SSH 서버에 대한 연결을 설정합니다. 가장 간단한 모드에서는 "Hello, Wolfssh!" 서버에 응답을 인쇄 한 다음 종료합니다. 의사 터미널 옵션을 사용하면 클라이언트가 실제 클라이언트가됩니다.
클라이언트 도구는 다음 명령 줄 옵션을 수락합니다.
-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
PortFWD 도구는 SSH 서버에 대한 연결을 설정하고 로컬 포트 전달을위한 리스너를 설정하거나 원격 포트 전달을 위해 리스너를 요청합니다. 연결 후 공구가 종료됩니다.
PortFWD 도구는 다음 명령 줄 옵션을 수락합니다.
-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)
SCPCLIENT 인 WOLFSCP는 SSH 서버에 대한 연결을 설정하고 지정된 파일을 로컬 컴퓨터로 복사합니다.
SCPClient 도구는 다음 명령 줄 옵션을 수용합니다.
-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
SFTPCLIENT 인 WOLFSFTP는 SSH 서버에 대한 연결을 설정하고 디렉토리 탐색, 파일 가져 오기 및 배치, 디렉토리 제작 및 제거 등을 허용합니다.
sftpclient 도구는 다음 명령 줄 옵션을 수락합니다.
-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
Wolfssh에는 SCP에 대한 서버 측 지원이 포함되어 있으며, 여기에는 '서버에 대한 파일 복사'와 '서버에서 파일을 복사'하는 것이 포함됩니다. 단일 파일과 재귀 디렉토리 사본은 모두 기본 송신 및 수신 콜백으로 지원됩니다.
SCP 지원으로 Wolfssh를 컴파일하려면 --enable-scp 빌드 옵션을 사용하거나 WOLFSSH_SCP 정의하십시오.
$ ./configure --enable-scp
$ make
전체 API 사용 및 구현 세부 정보는 Wolfssh 사용자 설명서를 참조하십시오.
Wolfssh 예제 서버는 단일 SCP 요청을 수락하도록 설정되었으며 Wolfssh 라이브러리를 컴파일 할 때 기본적으로 컴파일됩니다. 예제 서버를 시작하려면 실행하십시오.
$ ./examples/server/server
표준 SCP 명령은 클라이언트 측에서 사용할 수 있습니다. 다음은 scp 사용중인 SSH 클라이언트를 나타내는 몇 가지 예입니다.
기본 예제 사용자 "Jill"을 사용하여 단일 파일을 서버에 복사하려면 :
$ scp -P 22222 <local_file> [email protected]:<remote_path>
동일한 단일 파일을 서버에 복사하지만 타임 스탬프 및 장황 모드로 복사합니다.
$ scp -v -p -P 22222 <local_file> [email protected]:<remote_path>
디렉토리를 서버에 재귀 적으로 복사하려면 다음과 같습니다.
$ scp -P 22222 -r <local_dir> [email protected]:<remote_dir>
서버에서 로컬 클라이언트로 단일 파일을 복사하려면 :
$ scp -P 22222 [email protected]:<remote_file> <local_path>
서버에서 로컬 클라이언트로 디렉토리를 재귀 적으로 복사하려면 :
$ scp -P 22222 -r [email protected]:<remote_dir> <local_path>
Wolfssh는 포트 전달을 지원합니다. 이를 통해 사용자는 암호화 된 터널을 다른 서버로 설정할 수 있습니다. 여기서 SSH 클라이언트는 소켓을 듣고 해당 소켓의 연결을 서버의 다른 소켓으로 전달합니다.
포트 전달 지원으로 Wolfssh를 컴파일하려면 --enable-fwd 빌드 옵션을 사용하거나 WOLFSSH_FWD 정의하십시오.
$ ./configure --enable-fwd
$ make
전체 API 사용 및 구현 세부 정보는 Wolfssh 사용자 설명서를 참조하십시오.
PortFWD 예제 도구는 "Direct-TCPIP"스타일 채널을 만듭니다. 이 방향은 포트 전달을 활성화하여 백그라운드에서 OpenSsh의 서버가 실행된다고 가정합니다. 이 예제는 WolfSSL 클라이언트의 포트를 응용 프로그램으로 서버로 전달합니다. 모든 프로그램이 동일한 기계에서 다른 터미널에서 실행된다고 가정합니다.
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
기본적으로 WolfSSL Server는 포트 11111에서 청취합니다. 클라이언트는 포트 12345에 연결하도록 설정되어 있습니다. PortFWD 로그인은 사용자 "사용자 이름"으로 로그인하고 포트 12345에서 리스너를 열고 포트 11111의 서버에 연결합니다. "안녕하세요, 울프 스 슬레!"
PortFWD의 소스는 Wolfssh의 포트 전달 지원을 설정하고 사용하는 방법에 대한 예를 제공합니다.
Echoserver는 로컬 및 원격 포트 전달을 처리합니다. SSH 도구와 연결하려면 다음 명령 줄 중 하나를 사용하십시오. 어디서나 SSH 명령 줄을 실행할 수 있습니다.
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
이를 통해 이전 예제에서와 같이 WolfSSL 클라이언트와 서버 간의 포트 전달이 가능합니다.
Wolfssh는 SFTP 버전 3에 대한 서버 및 클라이언트 측 지원을 제공합니다.이를 통해 사용자는 파일 시스템 관리를 위해 암호화 된 연결을 설정할 수 있습니다.
SFTP 지원으로 Wolfssh를 컴파일하려면 --enable-sftp 빌드 옵션을 사용하거나 WOLFSSH_SFTP 정의하십시오.
$ ./configure --enable-sftp
$ make
전체 API 사용 및 구현 세부 정보는 Wolfssh 사용자 설명서를 참조하십시오.
생성 된 SFTP 클라이언트는 디렉토리 예제/ sftpclient/에 위치하고 있으며 Echoserver 예제는 SFTP 서버 역할을합니다.
src/wolfssh$ ./examples/sftpclient/wolfsftp
연결 후 "도움말"을 입력하면 지원되는 명령의 전체 목록을 볼 수 있습니다.
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
다른 시스템에 연결하는 예가 있습니다
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
Wolfssh의 예 Echoserver는 이제 사용자가 로그인하려는 사용자를 위해 쉘을 포크 할 수 있습니다. 현재 Linux 및 MacOS에서만 테스트되었습니다. 파일 echoserver.c는 사용자 인증 콜백에 사용자의 자격 증명이 있도록 수정되어야합니다. 또는 제공된 암호를 확인하려면 사용자 인증 콜백을 변경해야합니다.
쉘 지원으로 Wolfssh를 컴파일하려면 --enable-shell 빌드 옵션을 사용하거나 WOLFSSH_SHELL 정의하십시오.
$ ./configure --enable-shell
$ make
이 기능을 시험해 보려면 예제 Echoserver 및 클라이언트를 사용할 수 있습니다. 터미널에서 서버를 시작하려면 다음을 수행합니다.
$ ./examples/echoserver/echoserver -P <user>:junk
다른 터미널에서는 다음을 수행하여 예제 클라이언트를 시작합니다.
$ ./examples/client/client -t -u <user> -P junk
<user> 는 로그인 된 현재 사용자의 사용자 이름이어야합니다.
기본적으로 Echoserver는 쉘을 시작하려고합니다. 에코 테스트 동작을 사용하려면 에코 서버에게 명령 줄 옵션 -f 제공하십시오.
$ ./examples/echoserver/echoserver -f
Wolfsshd와 함께 쉘 기능을 사용하려면 구성 명령에 --enable-sshd 추가하고 다음 명령을 사용하십시오.
$ sudo ./apps/wolfsshd/wolfsshd -D -h keys/gretel-key-ecc.pem -p 11111
잘못된 sshd_config 파일에 대해 불만을 제기하는 경우 다른 파일에 복사하고 불만에 대한 불쾌한 줄을 제거하고 -f 명령 줄 매개 변수를 사용하여 새 파일을 가리 키십시오.
그런 다음 ssh를 사용하여 wolfsshd 서버에 연결할 수 있습니다.
$ ssh <user>@localhost -p 11111
<user> 는 로그인 된 현재 사용자의 사용자 이름이어야합니다.
Wolfssh는 이제 키 교환을 위해 Curve25519를 지원합니다. 이 지원을 가능하게하려면 Wolfssh 및 Curve25519에 대한 지원으로 WolfsSL을 컴파일하십시오.
$ cd wolfssl
$ ./configure --enable-wolfssh --enable-curve25519
WolfSSL을 구축하고 설치 한 후 옵션없이 단순히 구성 할 수 있습니다.
$ cd wolfssh
$ ./configure
Wolfssh 클라이언트 및 서버는 Curve25519를 사용하여 자동으로 협상합니다.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
Wolfssh는 이제 쿼터 후 알고리즘 ML-DSA (Kyber라고도 함)를 지원합니다. Kyber512 매개 변수 세트를 사용하고 P-256 ECC 곡선을 통해 ECDHE와 혼성화됩니다.
이 키 교환을 사용하려면 시스템에 WolfSSL을 구축하고 설치해야합니다. 다음은 효과적인 구성의 예입니다.
$ ./configure --enable-wolfssh --enable-experimental --enable-kyber
그 후, 평소와 같이 Wolfssh를 구성하고 빌드하십시오.
$ ./configure
$ make all
Wolfssh 클라이언트와 서버는 P-256 ECC 곡선을 통해 ECDHE와 혼성화 된 Kyber512를 사용하여 자동으로 협상합니다.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
클라이언트 측에는 다음 출력이 표시됩니다.
서버가 말했다 : 안녕하세요, Wolfssh!
OpenQauntumSafe의 OpenSsh의 포크와 상호 운용성을 보려면 Echoserver가 실행중인 동안 포크를 빌드하고 실행할 수 있습니다. 여기에서 릴리스를 다운로드하십시오.
https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
다음은 빌드 및 실행에 충분합니다.
$ 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
참고 : 프롬프트가 표시되면 "UptheHill"인 비밀번호를 입력하십시오.
당신은 텍스트 줄을 입력 할 수 있으며 Enter를 누르면 선이 다시 반향됩니다. CTRL-C를 사용하여 연결을 종료하십시오.
Wolfssh는 사용자를 인증 할 때 공개 키 만 대신 X.509 인증서를 수락 할 수 있습니다.
x.509 지원으로 Wolfssh를 컴파일하려면 --enable-certs 빌드 옵션을 사용하거나 WOLFSSH_CERTS 정의하십시오.
$ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
$ make
이 예에서는 "Fred"에 대한 포함 인증서에 필요한 FPKI 확장증이 없기 때문에 FPKI 검사를 비활성화하고 있습니다. 플래그 Wolfssh_No_FPKI가 제거되면 인증서가 거부되는 것을 볼 수 있습니다.
사용자 인증서를 확인하기 위해 CA 루트 인증서를 제공하려면 Echoserver에 명령 줄 옵션 -a 제공하십시오.
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
Echoserver와 클라이언트에는 "Fred"라는 가짜 사용자가 있으며 인증에 인증서가 사용됩니다.
예제 인증서를 사용한 Echoserver / Client 연결 예제 Fred-cert.der는 다음과 같습니다.
$ ./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
Wolfssh에는 서버 데몬과 명령 줄 쉘 도구가 함께 제공됩니다. 자세한 내용은 앱 디렉토리를 확인하십시오.