forked from fediversity/meta
		
	add ssh strategy
This commit is contained in:
		
							parent
							
								
									6b965debaf
								
							
						
					
					
						commit
						1c617dce0c
					
				
					 1 changed files with 87 additions and 0 deletions
				
			
		
							
								
								
									
										87
									
								
								architecture-docs/2025-03-31-ssh-strategy.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								architecture-docs/2025-03-31-ssh-strategy.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
# ssh access strategy
 | 
			
		||||
 | 
			
		||||
some notes on our current status, challenges and ways to address these
 | 
			
		||||
 | 
			
		||||
## questions
 | 
			
		||||
 | 
			
		||||
- [x] which keys do we accept on which users on which machines (infra/test)?
 | 
			
		||||
- [x] when deploying (by nixops/tf, machines infra/test, separate/local/deployed), which user and key do we pass?
 | 
			
		||||
 | 
			
		||||
## background
 | 
			
		||||
 | 
			
		||||
<!-- - manual setup kevin -->
 | 
			
		||||
  <!-- - `nixos-24.05-minimal-x86_64.iso` -->
 | 
			
		||||
  <!-- - `users.users.procolix.openssh.authorizedKeys.keys` (procolix SSH jump nodes) -->
 | 
			
		||||
- manual setup @niols
 | 
			
		||||
  - sync machines' `/etc/ssh/ssh_host_ed25519_key.pub` to:
 | 
			
		||||
    - `infra/test-machines/testxx/ssh_host_ed25519_key` (test machines)
 | 
			
		||||
    - `keys/systems/fedixxx.pub` (infra)
 | 
			
		||||
 | 
			
		||||
## challenges
 | 
			
		||||
 | 
			
		||||
- TF messing up non-root SSH access (`/etc/ssh/authorized_keys.d` absent)
 | 
			
		||||
- TF not having a clear SSH strategy for production
 | 
			
		||||
  - machine key? how to select the right user/key? how does nixops handle this?
 | 
			
		||||
- testing the panel locally not having a clear SSH strategy with password-protected SSH keys
 | 
			
		||||
 | 
			
		||||
## strategy
 | 
			
		||||
 | 
			
		||||
### which keys to accept on which users on which machines
 | 
			
		||||
 | 
			
		||||
- fedixxx/test0x
 | 
			
		||||
  <!-- - procolix -->
 | 
			
		||||
    <!-- - procolix jump nodes -->
 | 
			
		||||
  - root
 | 
			
		||||
    - fediversity team's individual keys
 | 
			
		||||
  - personal
 | 
			
		||||
    - personal (protected)
 | 
			
		||||
- test0x: a passwordless wheel account (personal accounts? root too?) should allow also an unprotected ssh key (personal?)
 | 
			
		||||
 | 
			
		||||
### how to use SSH on deployment
 | 
			
		||||
 | 
			
		||||
[^temp]: for now, as per the scope of #274
 | 
			
		||||
[^sensitive]: must be password-protected
 | 
			
		||||
[^agent]: thru ssh agent
 | 
			
		||||
[^inaccessible]: fails to handle password protection
 | 
			
		||||
[^propagate]: with password propagated, somehow
 | 
			
		||||
[^hardcoded]: hard-coded
 | 
			
		||||
[^explicit]: password can be passed explicitly
 | 
			
		||||
[^either]: unprotected, or if protected by passing it explicitly
 | 
			
		||||
 | 
			
		||||
#### user
 | 
			
		||||
 | 
			
		||||
|-|-|-|
 | 
			
		||||
| context | current | desired[^temp] |
 | 
			
		||||
| nixops infra | root | root |
 | 
			
		||||
| nixops local | root | root |
 | 
			
		||||
| protected? nixops panel local | root | root |
 | 
			
		||||
| nixops panel deployed | root | root |
 | 
			
		||||
<!-- | tf infra | root | root | -->
 | 
			
		||||
| tf local | personal[^hardcoded] | root |
 | 
			
		||||
| protected? tf panel local | personal[^hardcoded] | root |
 | 
			
		||||
| tf panel deployed | personal[^hardcoded] | root |
 | 
			
		||||
 | 
			
		||||
#### key
 | 
			
		||||
 | 
			
		||||
|-|-|-|
 | 
			
		||||
| context | current | desired |
 | 
			
		||||
| nixops infra | personal[^agent] | (protected) personal key |
 | 
			
		||||
| nixops local | personal[^agent] | personal |
 | 
			
		||||
| nixops panel local | personal[^agent] [^inaccessible] | (unprotected) personal key |
 | 
			
		||||
| nixops panel deployed | machine key[^agent] | machine key |
 | 
			
		||||
<!-- | tf infra | n/a | (protected) personal key [^propagate] | -->
 | 
			
		||||
| tf local | personal[^agent] [^explicit] | personal[^either] |
 | 
			
		||||
| tf panel local | personal[^agent] [^explicit] | personal[^either] |
 | 
			
		||||
| tf panel deployed | machine key[^agent] | machine key |
 | 
			
		||||
 | 
			
		||||
## solutions
 | 
			
		||||
 | 
			
		||||
- [x] fix ssh user in #274
 | 
			
		||||
- [ ] fix ssh access on test03
 | 
			
		||||
- [?] mimic strategy used with nixops for TF for ssh access from panel (deployed)
 | 
			
		||||
  - [ ] allow access by machine key? or.. how did nixops have access?
 | 
			
		||||
- [ ] use/allow separate unprotected SSH key for test0x VMs (#272)
 | 
			
		||||
- [ ] ensure whitelisted keys for infra are protected
 | 
			
		||||
- [ ] work out way to use password-protected ssh keys in TF for infra? e.g.:
 | 
			
		||||
  - delegate to ssh agent
 | 
			
		||||
  - pass explicitly
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue