| 
									
										
										
										
											2014-06-27 08:34:59 +02:00
										 |  |  | import ./make-test.nix ({ pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   snakeOilPrivateKey = pkgs.writeText "privkey.snakeoil" ''
 | 
					
						
							|  |  |  |     -----BEGIN EC PRIVATE KEY----- | 
					
						
							|  |  |  |     MHcCAQEEIHQf/khLvYrQ8IOika5yqtWvI0oquHlpRLTZiJy5dRJmoAoGCCqGSM49 | 
					
						
							|  |  |  |     AwEHoUQDQgAEKF0DYGbBwbj06tA3fd/+yP44cvmwmHBWXZCKbS+RQlAKvLXMWkpN | 
					
						
							|  |  |  |     r1lwMyJZoSGgBHoUahoYjTh9/sJL7XLJtA== | 
					
						
							|  |  |  |     -----END EC PRIVATE KEY----- | 
					
						
							|  |  |  |   '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   snakeOilPublicKey = pkgs.lib.concatStrings [ | 
					
						
							|  |  |  |     "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHA" | 
					
						
							|  |  |  |     "yNTYAAABBBChdA2BmwcG49OrQN33f/sj+OHL5sJhwVl2Qim0vkUJQCry1zFpKTa" | 
					
						
							|  |  |  |     "9ZcDMiWaEhoAR6FGoaGI04ff7CS+1yybQ= sakeoil" | 
					
						
							|  |  |  |   ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in { | 
					
						
							| 
									
										
										
										
											2014-06-28 16:04:49 +02:00
										 |  |  |   name = "openssh"; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  |   meta = with pkgs.stdenv.lib.maintainers; { | 
					
						
							|  |  |  |     maintainers = [ aszlig eelco chaoflow ]; | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2010-03-18 13:07:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   nodes = { | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     server = | 
					
						
							| 
									
										
										
										
											2011-01-12 17:36:15 +00:00
										 |  |  |       { config, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-18 13:07:56 +00:00
										 |  |  |       { | 
					
						
							|  |  |  |         services.openssh.enable = true; | 
					
						
							| 
									
										
										
										
											2013-10-17 15:37:08 +02:00
										 |  |  |         security.pam.services.sshd.limits = | 
					
						
							|  |  |  |           [ { domain = "*"; item = "memlock"; type = "-"; value = 1024; } ]; | 
					
						
							| 
									
										
										
										
											2014-06-27 08:34:59 +02:00
										 |  |  |         users.extraUsers.root.openssh.authorizedKeys.keys = [ | 
					
						
							|  |  |  |           snakeOilPublicKey | 
					
						
							|  |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2010-05-27 10:05:17 +00:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-29 09:49:43 -05:00
										 |  |  |     server_lazy = | 
					
						
							|  |  |  |       { config, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         services.openssh = { enable = true; startWhenNeeded = true; }; | 
					
						
							|  |  |  |         security.pam.services.sshd.limits = | 
					
						
							|  |  |  |           [ { domain = "*"; item = "memlock"; type = "-"; value = 1024; } ]; | 
					
						
							|  |  |  |         users.extraUsers.root.openssh.authorizedKeys.keys = [ | 
					
						
							|  |  |  |           snakeOilPublicKey | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |     client = | 
					
						
							| 
									
										
										
										
											2011-01-12 17:36:15 +00:00
										 |  |  |       { config, pkgs, ... }: { }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-18 13:07:56 +00:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-12 17:36:15 +00:00
										 |  |  |   testScript = ''
 | 
					
						
							|  |  |  |     startAll; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 11:16:26 -07:00
										 |  |  |     my $key=`${pkgs.openssh}/bin/ssh-keygen -t ed25519 -f key -N ""`; | 
					
						
							| 
									
										
										
										
											2011-01-12 17:36:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-24 18:22:53 +02:00
										 |  |  |     $server->waitForUnit("sshd"); | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-27 08:34:59 +02:00
										 |  |  |     subtest "manual-authkey", sub { | 
					
						
							|  |  |  |       $server->succeed("mkdir -m 700 /root/.ssh"); | 
					
						
							|  |  |  |       $server->copyFileFromHost("key.pub", "/root/.ssh/authorized_keys"); | 
					
						
							| 
									
										
										
										
											2016-12-29 09:49:43 -05:00
										 |  |  |       $server_lazy->succeed("mkdir -m 700 /root/.ssh"); | 
					
						
							|  |  |  |       $server_lazy->copyFileFromHost("key.pub", "/root/.ssh/authorized_keys"); | 
					
						
							| 
									
										
										
										
											2014-06-27 08:34:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       $client->succeed("mkdir -m 700 /root/.ssh"); | 
					
						
							| 
									
										
										
										
											2015-08-12 11:16:26 -07:00
										 |  |  |       $client->copyFileFromHost("key", "/root/.ssh/id_ed25519"); | 
					
						
							|  |  |  |       $client->succeed("chmod 600 /root/.ssh/id_ed25519"); | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-27 08:34:59 +02:00
										 |  |  |       $client->waitForUnit("network.target"); | 
					
						
							|  |  |  |       $client->succeed("ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'echo hello world' >&2"); | 
					
						
							|  |  |  |       $client->succeed("ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server 'ulimit -l' | grep 1024"); | 
					
						
							| 
									
										
										
										
											2016-12-29 09:49:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |       $client->succeed("ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'echo hello world' >&2"); | 
					
						
							|  |  |  |       $client->succeed("ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no server_lazy 'ulimit -l' | grep 1024"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-27 08:34:59 +02:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-27 08:34:59 +02:00
										 |  |  |     subtest "configured-authkey", sub { | 
					
						
							|  |  |  |       $client->succeed("cat ${snakeOilPrivateKey} > privkey.snakeoil"); | 
					
						
							|  |  |  |       $client->succeed("chmod 600 privkey.snakeoil"); | 
					
						
							|  |  |  |       $client->succeed("ssh -o UserKnownHostsFile=/dev/null" . | 
					
						
							|  |  |  |                        " -o StrictHostKeyChecking=no -i privkey.snakeoil" . | 
					
						
							|  |  |  |                        " server true"); | 
					
						
							| 
									
										
										
										
											2016-12-29 09:49:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |       $client->succeed("ssh -o UserKnownHostsFile=/dev/null" . | 
					
						
							|  |  |  |                        " -o StrictHostKeyChecking=no -i privkey.snakeoil" . | 
					
						
							|  |  |  |                        " server_lazy true"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-27 08:34:59 +02:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2010-03-18 13:07:56 +00:00
										 |  |  |   '';
 | 
					
						
							| 
									
										
										
										
											2014-04-14 14:02:44 +02:00
										 |  |  | }) |