tests: ssh: Add Dropbear test.

* gnu/tests/ssh.scm (run-ssh-test): Try authenticating with
'userauth-none!' when 'userauth-password!' fails.
(%test-dropbear): New variable.
This commit is contained in:
Ludovic Courtès 2016-10-03 15:18:51 +02:00
parent 0e59885060
commit 2b4363891c
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -31,7 +31,8 @@ (define-module (gnu tests ssh)
#:use-module (guix gexp)
#:use-module (guix store)
#:use-module (guix monads)
#:export (%test-openssh))
#:export (%test-openssh
%test-dropbear))
(define %base-os
(operating-system
@ -74,6 +75,7 @@ (define test
%load-path)))
(use-modules (gnu build marionette)
(srfi srfi-26)
(srfi srfi-64)
(ice-9 match)
(ssh session)
@ -139,16 +141,27 @@ (define (wait-for-file file)
#:log-verbosity 'protocol)))
(match (connect! session)
('ok
(match (pk 'auth (userauth-password! session ""))
('success
;; FIXME: 'get-server-public-key' segfaults.
;; (get-server-public-key session)
(let ((channel (make-channel session)))
(channel-open-session channel)
(channel-request-exec channel
"echo hello > /root/witness")
(and (zero? (channel-get-exit-status channel))
(wait-for-file "/root/witness")))))))))
;; Try the simple authentication methods. Dropbear
;; requires 'none' when there are no passwords, whereas
;; OpenSSH accepts 'password' with an empty password.
(let loop ((methods (list (cut userauth-password! <> "")
(cut userauth-none! <>))))
(match methods
(()
(error "all the authentication methods failed"))
((auth rest ...)
(match (pk 'auth (auth session))
('success
;; FIXME: 'get-server-public-key' segfaults.
;; (get-server-public-key session)
(let ((channel (make-channel session)))
(channel-open-session channel)
(channel-request-exec channel
"echo hello > /root/witness")
(and (zero? (channel-get-exit-status channel))
(wait-for-file "/root/witness"))))
('denied
(loop rest))))))))))
(test-end)
(exit (= (test-runner-fail-count (test-runner-current)) 0)))))
@ -167,3 +180,14 @@ (define %test-openssh
(permit-root-login #t)
(allow-empty-passwords? #t)))
"/var/run/sshd.pid"))))
(define %test-dropbear
(system-test
(name "dropbear")
(description "Connect to a running Dropbear SSH daemon.")
(value (run-ssh-test name
(service dropbear-service-type
(dropbear-configuration
(root-login? #t)
(allow-empty-passwords? #t)))
"/var/run/dropbear.pid"))))