Manual SSH Server SSH Wolfssl Wolfssl
Wolfssh bergantung pada Wolfcrypt, ditemukan sebagai bagian dari Wolfssl. Berikut ini adalah konfigurasi paling sederhana dari Wolfssl untuk memungkinkan Wolfssh.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
Pada beberapa sistem, perintah LDConfig opsional diperlukan setelah menginstal.
Untuk menggunakan fungsi pembuatan kunci di Wolfssh, Wolfssl perlu dikonfigurasi dengan Keygen: --enable-keygen .
Saat menggunakan sertifikat X.509 untuk otentikasi pengguna, Wolfssl harus dibangun dengan TLS diaktifkan. Wolfssh menggunakan sistem manajer sertifikat Wolfssl untuk X.509, termasuk pencarian OCSP. Untuk mengizinkan OCSP, tambahkan --enable-ocsp ke konfigurasi wolfssl.
Jika sebagian besar kode Wolfssl tidak diinginkan, Wolfssl dapat dikonfigurasi dengan opsi Crypto Only: --enable-cryptonly .
Opsi pembangunan tambahan untuk Wolfssl terletak di Bab Dua. Manual Wolfssh.
Dari Direktori Sumber Wolfssh Run:
$ ./autogen.sh
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
Skrip autogen.sh hanya harus dijalankan pertama kali setelah mengkloning repositori. Jika Anda sudah menjalankannya atau menggunakan kode dari arsip sumber, Anda harus melewatkannya.
Untuk membangun di bawah Windows dengan Visual Studio, lihat file "IDE/WINVS/README.MD".
CATATAN: Pada perangkat yang dibatasi sumber daya DEFAULT_WINDOW_SZ mungkin perlu diatur ke ukuran yang lebih rendah. Ini juga dapat ditingkatkan dalam kasus penggunaan desktop untuk membantu transfer file besar. Secara default saluran diatur untuk menerima hingga 128kb data sebelum mengirim pesan penyesuaian jendela saluran. Contoh pengaturan ukuran jendela untuk saluran baru adalah sebagai berikut ./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
Untuk platform 32bit Linux Anda dapat menambahkan dukungan untuk file> 2GB dengan berkomplot dengan CFLAGS=-D_FILE_OFFSET_BITS=64 .
examples direktori berisi echoserver yang harus dapat dihubungkan oleh klien mana pun. Dari terminal run:
$ ./examples/echoserver/echoserver -f
Opsi -f memungkinkan mode echo -only. Dari terminal lain lari:
$ ssh jill@localhost -p 22222
Saat diminta untuk kata sandi, masukkan "UpTheHill". Server akan mengirim spanduk kalengan ke klien:
wolfSSH Example Echo Server
Karakter yang diketik ke klien akan digemakan ke layar oleh server. Jika karakter digemakan dua kali, klien memiliki Echo lokal diaktifkan. Echoserver tidak menjadi terminal yang tepat sehingga terjemahan CR/LF tidak akan berfungsi seperti yang diharapkan.
Karakter kontrol berikut akan memicu tindakan khusus di Echoserver:
Setelah mengkloning repositori, pastikan untuk membuat tombol pribadi pengujian hanya dibaca untuk pengguna, jika tidak, ssh akan memberitahu Anda untuk melakukannya.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
Otentikasi terhadap contoh Echoserver dapat dilakukan dengan kata sandi atau kunci publik. Untuk menggunakan kata sandi baris perintah:
$ ssh -p 22222 USER@localhost
Di mana pasangan pengguna dan kata sandi berada:
jill:upthehill
jack:fetchapail
Untuk menggunakan otentikasi kunci publik, gunakan baris perintah:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Di mana pengguna dapat menjadi gretel atau hansel , dan jenisnya adalah rsa atau ecc .
Perlu diingat, Echoserver memiliki beberapa akun palsu dalam fungsi panggilan balik wsUserAuth() . (Jack, Jill, Hansel, dan Gretel) Ketika dukungan shell diaktifkan, akun palsu itu tidak akan berfungsi. Mereka tidak ada dalam file passwd sistem. Pengguna akan mengautentikasi, tetapi server akan keliru karena tidak ada dalam sistem. Anda dapat menambahkan nama pengguna Anda sendiri ke kata sandi atau daftar kunci publik di Echoserver. Akun itu akan masuk ke shell yang dimulai oleh Echoserver dengan hak istimewa pengguna yang menjalankan Echoserver.
Wolfssh dikemas dengan beberapa contoh alat untuk tujuan pengujian dan untuk menunjukkan interoperabilitas dengan implementasi SSH lainnya.
Echoserver adalah pekerja keras Wolfssh. Awalnya hanya memungkinkan seseorang untuk mengotentikasi salah satu akun kalengan dan akan mengulangi karakter yang diketik. Saat mengaktifkan dukungan shell, itu dapat memunculkan shell pengguna. Ini akan membutuhkan nama pengguna yang sebenarnya pada mesin dan fungsi panggilan balik otentikasi pengguna yang diperbarui untuk memvalidasi kredensial. Echoserver juga dapat menangani koneksi SCP dan SFTP.
Alat EchoServer menerima opsi baris perintah berikut:
-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
Klien membuat koneksi ke server SSH. Dalam mode paling sederhana, ia mengirimkan string "Halo, Wolfssh!" ke server, mencetak respons, dan kemudian keluar. Dengan opsi terminal semu, klien akan menjadi klien nyata.
Alat klien menerima opsi baris perintah berikut:
-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
Alat PortFWD membuat koneksi ke server SSH dan mengatur pendengar untuk penerusan port lokal atau meminta pendengar untuk penerusan port jarak jauh. Setelah koneksi, alat berakhir.
Alat PortFWD menerima opsi baris perintah berikut:
-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, membuat koneksi ke server SSH dan menyalin file yang ditentukan dari atau ke mesin lokal.
Alat SCPClient menerima opsi baris perintah berikut:
-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, membuat koneksi ke server SSH dan memungkinkan navigasi direktori, mendapatkan dan meletakkan file, membuat dan menghapus direktori, dll.
Alat SFTPClient menerima opsi baris perintah berikut:
-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 mencakup dukungan sisi server untuk SCP, yang mencakup dukungan untuk kedua file menyalin 'ke' server, dan menyalin file 'dari' server. Salinan satu file dan direkursi rekursif didukung dengan kirim default dan menerima panggilan balik.
Untuk mengkompilasi Wolfssh dengan dukungan SCP, gunakan opsi Build --enable-scp atau tentukan WOLFSSH_SCP :
$ ./configure --enable-scp
$ make
Untuk detail penggunaan dan implementasi API lengkap, silakan lihat Manual Pengguna Wolfssh.
Server Contoh Wolfssh telah diatur untuk menerima permintaan SCP tunggal, dan dikompilasi secara default saat menyusun perpustakaan Wolfssh. Untuk memulai server contoh, jalankan:
$ ./examples/server/server
Perintah SCP standar dapat digunakan di sisi klien. Berikut ini adalah beberapa contoh, di mana scp mewakili klien SSH yang Anda gunakan.
Untuk menyalin satu file ke server, menggunakan pengguna default "Jill":
$ scp -P 22222 <local_file> [email protected]:<remote_path>
Untuk menyalin file tunggal yang sama ke server, tetapi dengan cap waktu dan dalam mode verbose:
$ scp -v -p -P 22222 <local_file> [email protected]:<remote_path>
Untuk menyalin secara rekursif direktori ke server:
$ scp -P 22222 -r <local_dir> [email protected]:<remote_dir>
Untuk menyalin satu file dari server ke klien lokal:
$ scp -P 22222 [email protected]:<remote_file> <local_path>
Untuk menyalin secara rekursif direktori dari server ke klien lokal:
$ scp -P 22222 -r [email protected]:<remote_dir> <local_path>
Wolfssh memberikan dukungan untuk penerusan port. Hal ini memungkinkan pengguna untuk mengatur terowongan terenkripsi ke server lain, di mana klien SSH mendengarkan soket dan menghubungkan koneksi pada soket itu ke soket lain di server.
Untuk mengkompilasi Wolfssh dengan dukungan penerusan port, gunakan opsi Build --enable-fwd atau tentukan WOLFSSH_FWD :
$ ./configure --enable-fwd
$ make
Untuk detail penggunaan dan implementasi API lengkap, silakan lihat Manual Pengguna Wolfssh.
Alat contoh portfwd akan membuat saluran gaya "langsung-tcpip". Arahan ini menganggap Anda memiliki server OpenSsh yang berjalan di latar belakang dengan port forwarding diaktifkan. Contoh ini meneruskan port untuk klien Wolfssl ke server sebagai aplikasi. Diasumsikan bahwa semua program dijalankan pada mesin yang sama di terminal yang berbeda.
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
Secara default, server Wolfssl mendengarkan port 11111. Klien diatur untuk mencoba terhubung ke port 12345. Portfwd log dalam sebagai pengguna "nama pengguna", membuka pendengar di port 12345 dan terhubung ke server di port 11111. Paket diarahkan bolak -balik antara klien dan server. "Halo, Wolfssl!"
Sumber untuk PortFWD memberikan contoh tentang cara mengatur dan menggunakan dukungan penerusan port di Wolfssh.
Echoserver akan menangani penerusan port lokal dan jarak jauh. Untuk terhubung dengan alat SSH, menggunakan salah satu baris perintah berikut. Anda dapat menjalankan salah satu baris perintah SSH dari mana saja:
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
Ini akan memungkinkan penerusan port antara klien Wolfssl dan server seperti pada contoh sebelumnya.
Wolfssh menyediakan dukungan sisi server dan klien untuk SFTP versi 3. Ini memungkinkan pengguna untuk mengatur koneksi terenkripsi untuk mengelola sistem file.
Untuk mengkompilasi Wolfssh dengan dukungan SFTP, gunakan opsi Build --enable-sftp atau tentukan WOLFSSH_SFTP :
$ ./configure --enable-sftp
$ make
Untuk detail penggunaan dan implementasi API lengkap, silakan lihat Manual Pengguna Wolfssh.
Klien SFTP yang dibuat terletak di Contoh Direktori/ SFTPClient/ dan contoh Echoserver bertindak sebagai server SFTP.
src/wolfssh$ ./examples/sftpclient/wolfsftp
Daftar lengkap perintah yang didukung dapat dilihat dengan mengetik "bantuan" setelah koneksi.
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
Contoh menghubungkan ke sistem lain adalah
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
Contoh Echoserver Wolfssh sekarang dapat membayar shell untuk pengguna yang mencoba masuk. Saat ini hanya diuji di Linux dan MacOS. File echoserver.c harus dimodifikasi untuk memiliki kredensial pengguna dalam panggilan balik otentikasi pengguna, atau panggilan balik otentikasi pengguna perlu diubah untuk memverifikasi kata sandi yang disediakan.
Untuk mengkompilasi Wolfssh dengan dukungan shell, gunakan opsi Build --enable-shell atau tentukan WOLFSSH_SHELL :
$ ./configure --enable-shell
$ make
Untuk mencoba fungsi ini, Anda dapat menggunakan contoh Echoserver dan Klien. Di terminal, lakukan hal berikut untuk meluncurkan server:
$ ./examples/echoserver/echoserver -P <user>:junk
Dan di terminal lain melakukan hal berikut untuk meluncurkan contoh klien:
$ ./examples/client/client -t -u <user> -P junk
Perhatikan bahwa <user> harus menjadi nama pengguna dari pengguna saat ini yang masuk.
Secara default, Echoserver akan mencoba memulai shell. Untuk menggunakan perilaku pengujian gema, berikan echoserver opsi baris perintah -f .
$ ./examples/echoserver/echoserver -f
Untuk menggunakan fitur Shell dengan Wolfsshd Tambah --enable-sshd ke perintah konfigurasi Anda dan gunakan perintah berikut:
$ sudo ./apps/wolfsshd/wolfsshd -D -h keys/gretel-key-ecc.pem -p 11111
Jika mengeluh tentang file sshd_config yang buruk, cukup salin ke file lain dan hapus baris yang disinggung yang dikeluhkannya dan gunakan parameter baris perintah -f untuk menunjuk ke file baru.
Anda kemudian dapat terhubung ke server wolfsshd dengan SSH:
$ ssh <user>@localhost -p 11111
Perhatikan bahwa <user> harus menjadi nama pengguna dari pengguna saat ini yang masuk.
Wolfssh sekarang mendukung Curve25519 untuk pertukaran utama. Untuk mengaktifkan dukungan ini, cukup kompilasi Wolfssl dengan dukungan untuk Wolfssh dan Curve25519.
$ cd wolfssl
$ ./configure --enable-wolfssh --enable-curve25519
Setelah membangun dan menginstal Wolfssl, Anda dapat dengan mudah mengonfigurasi tanpa opsi.
$ cd wolfssh
$ ./configure
Klien dan server Wolfssh akan secara otomatis bernegosiasi menggunakan Curve25519.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
Wolfssh sekarang mendukung algoritma pasca-kuantum ML-DSA (juga dikenal sebagai Kyber). Ini menggunakan set parameter Kyber512 dan dihidridisasi dengan ECDHE di atas kurva ECC P-256.
Untuk menggunakan pertukaran kunci ini, Anda harus membangun dan menginstal Wolfssl pada sistem Anda. Berikut adalah contoh konfigurasi yang efektif:
$ ./configure --enable-wolfssh --enable-experimental --enable-kyber
Setelah itu, cukup konfigurasikan dan bangun Wolfssh seperti biasa:
$ ./configure
$ make all
Klien dan server Wolfssh akan secara otomatis bernegosiasi menggunakan Kyber512 hibridisasi dengan ECDHE di atas kurva ECC P-256.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
Di sisi klien, Anda akan melihat output berikut:
Server berkata: Halo, Wolfssh!
Jika Anda ingin melihat inter-operabilitas dengan Fork OpenSsh OpenQauntumsafe, Anda dapat membangun dan mengeksekusi garpu saat Echoserver sedang berjalan. Unduh rilis dari sini:
https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
Berikut ini cukup untuk membangun dan mengeksekusi:
$ 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
Catatan: Saat diminta, masukkan kata sandi yang "uptheHill".
Anda dapat mengetik baris teks dan ketika Anda menekan enter, garis akan digemakan kembali. Gunakan Ctrl-C untuk mengakhiri koneksi.
Wolfssh dapat menerima sertifikat X.509 sebagai pengganti kunci publik saat mengautentikasi pengguna.
Untuk mengkompilasi Wolfssh dengan dukungan X.509, gunakan opsi --enable-certs dibangun-Tentukan WOLFSSH_CERTS :
$ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
$ make
Untuk contoh ini, kami menonaktifkan pemeriksaan FPKI sebagai sertifikat yang disertakan untuk "Fred" tidak memiliki ekstensi FPKI yang diperlukan. Jika bendera wolfssh_no_fpki dihapus, Anda dapat melihat sertifikat ditolak.
Untuk memberikan sertifikat CA root untuk memvalidasi sertifikat pengguna, berikan echoserver opsi baris perintah -a .
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
Echoserver dan klien memiliki pengguna palsu bernama "Fred" yang sertifikatnya akan digunakan untuk otentikasi.
Contoh Koneksi EchoServer / Klien Menggunakan Contoh Sertifikat Fred-Cert.der adalah:
$ ./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 hadir dengan daemon server dan alat shell baris perintah. Lihat direktori aplikasi untuk informasi lebih lanjut.