ssh-connections.td 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. #
  10. # Test SSH key generation and management for SSH connections
  11. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  12. ALTER SYSTEM SET enable_connection_validation_syntax = true
  13. > SELECT * FROM mz_ssh_tunnel_connections;
  14. id public_key_1 public_key_2
  15. ----------------------------
  16. ! CREATE CONNECTION louisoix TO SSH TUNNEL (
  17. HOST 'chaos.example.com',
  18. USER 'louisoix',
  19. PORT 22,
  20. PUBLIC KEY 1 = 'bad'
  21. );
  22. contains:the PUBLIC KEY 1 option cannot be explicitly specified
  23. ! CREATE CONNECTION louisoix TO SSH TUNNEL (
  24. HOST 'chaos.example.com',
  25. USER 'louisoix',
  26. PORT 22,
  27. PUBLIC KEY 2 = 'bad'
  28. );
  29. contains:the PUBLIC KEY 2 option cannot be explicitly specified
  30. > CREATE CONNECTION louisoix TO SSH TUNNEL (
  31. HOST 'chaos.example.com',
  32. USER 'louisoix',
  33. PORT 22
  34. );
  35. # mz_ssh_tunnel_connections is properly populated, and SSH public keys look like keys
  36. > SELECT name, public_key_1 LIKE 'ssh-ed25519%' pkey1, public_key_2 LIKE 'ssh-ed25519%' pkey2
  37. FROM mz_ssh_tunnel_connections
  38. JOIN mz_connections USING (id);
  39. name pkey1 pkey2
  40. --------------------
  41. louisoix true true
  42. > CREATE CONNECTION omega TO SSH TUNNEL (
  43. HOST 'chaos.example.com',
  44. USER 'omega',
  45. PORT 22
  46. );
  47. > SELECT name, public_key_1 LIKE 'ssh-ed25519%' pkey1, public_key_2 LIKE 'ssh-ed25519%' pkey2
  48. FROM mz_ssh_tunnel_connections
  49. JOIN mz_connections USING (id);
  50. name pkey1 pkey2
  51. --------------------
  52. louisoix true true
  53. omega true true
  54. > DROP CONNECTION louisoix;
  55. # SSH connections can be normally dropped
  56. > SELECT name, public_key_1 LIKE 'ssh-ed25519%' pkey1, public_key_2 LIKE 'ssh-ed25519%' pkey2
  57. FROM mz_ssh_tunnel_connections
  58. JOIN mz_connections USING (id);
  59. name pkey1 pkey2
  60. --------------------
  61. omega true true
  62. # Key rotation doesn't fail
  63. > ALTER CONNECTION omega ROTATE KEYS;
  64. > SELECT name, public_key_1 LIKE 'ssh-ed25519%' pkey1, public_key_2 LIKE 'ssh-ed25519%' pkey2
  65. FROM mz_ssh_tunnel_connections
  66. JOIN mz_connections USING (id);
  67. name pkey1 pkey2
  68. --------------------
  69. omega true true
  70. > DROP CONNECTION omega;
  71. # Connections can still be dropped after rotating keys
  72. > SELECT name, public_key_1 LIKE 'ssh-ed25519%' pkey1, public_key_2 LIKE 'ssh-ed25519%' pkey2
  73. FROM mz_ssh_tunnel_connections
  74. JOIN mz_connections USING (id);
  75. name pkey1 pkey2
  76. --------------------
  77. > CREATE CONNECTION phoenix TO SSH TUNNEL (
  78. HOST 'light.example.com',
  79. USER 'phoenix',
  80. PORT 22
  81. );
  82. > CREATE CONNECTION yshtola TO POSTGRES (
  83. HOST 'linsa.example.com',
  84. PORT 5432,
  85. DATABASE 'source',
  86. USER 'yshtola',
  87. SSH TUNNEL phoenix
  88. ) WITH (VALIDATE = false);
  89. ! CREATE CONNECTION papalymo TO POSTGRES (
  90. HOST 'gridania.example.com',
  91. PORT 5432,
  92. DATABASE 'source',
  93. USER 'yshtola',
  94. SSH TUNNEL johto
  95. );
  96. contains: unknown catalog item 'johto'
  97. ! CREATE CONNECTION papalymo TO POSTGRES (
  98. HOST 'gridania.example.com',
  99. PORT 5432,
  100. DATABASE 'source',
  101. USER 'yshtola',
  102. SSH TUNNEL yshtola
  103. );
  104. contains: yshtola is not an SSH connection
  105. > SELECT name, type from mz_connections WHERE id LIKE 'u%';
  106. name type
  107. ----------------
  108. phoenix ssh-tunnel
  109. yshtola postgres
  110. # SSH tunnel dependencies are properly tracked
  111. ! DROP CONNECTION phoenix;
  112. contains: still depended upon
  113. > DROP CONNECTION phoenix CASCADE;
  114. > SELECT name, type from mz_connections WHERE id LIKE 'u%';
  115. name type
  116. ----------------
  117. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  118. ALTER SYSTEM SET storage_enforce_external_addresses = true
  119. > CREATE CONNECTION omega TO SSH TUNNEL (
  120. HOST 'chaos.example.com',
  121. USER 'omega',
  122. PORT 22
  123. );
  124. # error is not consistent
  125. ! VALIDATE CONNECTION omega;
  126. contains:failed to
  127. > CREATE CONNECTION local TO SSH TUNNEL (
  128. HOST 'ssh-bastion-host',
  129. USER 'omega',
  130. PORT 22
  131. );
  132. ! VALIDATE CONNECTION local;
  133. contains:Address resolved to a private IP
  134. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  135. ALTER SYSTEM SET storage_enforce_external_addresses = false