WolfsSLの組み込み可能なSSHサーバーWolfsshマニュアル
WolfsshはWolfcryptに依存しており、Wolfsslの一部として見つかりました。以下は、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を許可するには、WolfSSL構成に--enable-ocspを追加します。
WolfSSLコードの大部分が望まれていない場合、WolfSSLはCryptoのみのオプションで構成できます: --enable-cryptonly 。
WolfSSLの追加のビルドオプションは、第2章にあります。 Wolfsshマニュアルの。
Wolfssh Source Directoryの実行から:
$ ./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ビットLinuxプラットフォームの場合CFLAGS=-D_FILE_OFFSET_BITS=64に応じて、2GBを> 2GB> 2GBのサポートを追加できます。
ディレクトリのexamplesは、クライアントが接続できるはずのエコーザーが含まれています。ターミナルランから:
$ ./examples/echoserver/echoserver -f
オプション-f 、エコーのみのモードを有効にします。別のターミナルランから:
$ ssh jill@localhost -p 22222
パスワードを求められたら、「Upthehill」を入力します。サーバーは、缶詰のバナーをクライアントに送信します。
wolfSSH Example Echo Server
クライアントに入力された文字は、サーバーによって画面にエコーされます。文字が2回エコーされている場合、クライアントはローカルエコーを有効にします。エコーザーは適切な端末ではないため、CR/LFの翻訳は予想どおりに機能しません。
次のコントロール文字は、エコーザーでの特別なアクションをトリガーします。
リポジトリをクローニングした後、ユーザーのテストのプライベートキーを読み取り専用にしてください。そうしないと、 sshそれを行うように指示します。
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
EcheCoserverの例に対する認証は、パスワードまたは公開キーで実行できます。パスワードを使用するには、コマンドラインを使用します。
$ ssh -p 22222 USER@localhost
ユーザーとパスワードのペアがある場所:
jill:upthehill
jack:fetchapail
公開キー認証を使用するには、コマンドラインを使用します。
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
ユーザーがgretelまたはhanselになり、タイプはrsaまたはeccです。
echeCoserverには、 wsUserAuth()コールバック関数にいくつかの偽のアカウントがあります。 (Jack、Jill、Hansel、およびGretel)シェルサポートが有効になっている場合、それらの偽のアカウントは機能しません。システムのPassWDファイルには存在しません。ユーザーは認証されますが、システムに存在しないため、サーバーは誤ります。 echeCoserverのパスワードまたは公開キーリストに独自のユーザー名を追加できます。そのアカウントは、ユーザーがeChoserverを実行しているユーザーの特権を使用して、エコーザーによって開始されたシェルにログインされます。
Wolfsshには、テスト目的で、他のSSH実装との相互運用性を実証するためのいくつかのサンプルツールがパッケージ化されています。
エコーザーはウルフスシュの主力です。もともとは、缶詰アカウントのいずれかを認証することを許可し、それに入力された文字を繰り返すことができました。シェルサポートを有効にすると、ユーザーシェルを生成できます。マシン上の実際のユーザー名と、資格情報を検証するために更新されたユーザー認証コールバック関数が必要です。エコーザーは、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サーバーへの接続を確立します。最も単純なモードでは、文字列「こんにちは、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のサーバー側のサポートが含まれています。これには、「サーバー」から「サーバーへ」のファイルをコピーすることと、「サーバー」からファイルをコピーすることが含まれます。単一のファイルと再帰ディレクトリの両方のコピーは、デフォルトの送信および受信コールバックでサポートされています。
WolfsshをSCPサポートでコンパイルするには、 --enable-scpビルドオプションを使用するか、 WOLFSSH_SCPを定義します。
$ ./configure --enable-scp
$ make
APIの完全な使用と実装の詳細については、Wolfsshユーザーマニュアルを参照してください。
Wolfsshのサンプルサーバーは、単一のSCPリクエストを受け入れるように設定されており、Wolfsshライブラリをコンパイルするときにデフォルトでコンパイルされます。サンプルサーバーを起動するには、実行します。
$ ./examples/server/server
標準のSCPコマンドは、クライアント側で使用できます。以下は、 scpが使用しているSSHクライアントを表すいくつかの例です。
デフォルトの例を使用して、単一のファイルをサーバーにコピーするには、「ジル」を使用して:
$ 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サーバーはポート11111に耳を傾けます。クライアントはポート12345に接続しようとするように設定されています。ポートFWDはユーザー「ユーザー名」としてログインし、ポート12345でリスナーを開き、ポート11111でサーバーに接続します。 「こんにちは、ウルフスル!」
PORTFWDのソースは、Wolfsshのポート転送サポートのセットアップと使用方法に関する例を示しています。
echeCoserverは、ローカルおよびリモートポートの転送を処理します。次のコマンドラインのいずれかを使用して、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/にあり、EcheCoserverの例は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とMacOでのみテストされています。ファイルechoserver.cを変更して、ユーザー認証コールバックにユーザーの資格情報を置くか、ユーザー認証コールバックを変更して提供されたパスワードを確認する必要があります。
Wolfsshをシェルサポートでコンパイルするには、 --enable-shellビルドオプションを使用するか、 WOLFSSH_SHELLを定義します。
$ ./configure --enable-shell
$ make
この機能を試すには、EcheCoserverの例とクライアントを使用できます。端末で、サーバーを起動するために次のことを行います。
$ ./examples/echoserver/echoserver -P <user>:junk
別の端末で、クライアントのサンプルを起動するために次のことを行います。
$ ./examples/client/client -t -u <user> -P junk
<user> 、ログインされている現在のユーザーのユーザー名である必要があることに注意してください。
デフォルトでは、エコーザーはシェルを起動しようとします。エコーテスト動作を使用するには、エコーザーにコマンドラインオプション-fを与えます。
$ ./examples/echoserver/echoserver -f
wolfsshd addでシェル機能を使用するには、Configureコマンドに--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は現在、Quantum後アルゴリズム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のフォークでの間の操作性を確認したい場合は、エコーザーが実行されている間にフォークを構築および実行できます。ここからリリースをダウンロードしてください:
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チェックを無効にしています。 flag wolfssh_no_fpkiが削除された場合、証明書が拒否されることがわかります。
ユーザーの証明書を検証するためのCAルート証明書を提供するには、eChoServerにコマンドラインオプション-a指定します。
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
eChoserverとクライアントには、認証に証明書が使用される「Fred」という名前の偽のユーザーがいます。
例証明書FRED-CERT.DERを使用したECHOSERVER /クライアント接続の例は次のとおりです。
$ ./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には、サーバーデーモンとコマンドラインシェルツールが付属しています。詳細については、アプリディレクトリをご覧ください。