Readme: init
This commit is contained in:
parent
866daa51ba
commit
847b2c9596
1 changed files with 204 additions and 0 deletions
204
README.md
Normal file
204
README.md
Normal file
|
@ -0,0 +1,204 @@
|
|||
# SSH config+
|
||||
|
||||
Streamline repetitive ssh config files with trait-style property inheritance!
|
||||
|
||||
ssh_config+ is meant for users with very large and repetitive ssh configs. This
|
||||
includes templating, an inheretence-style way of copying fields, and for loops
|
||||
to reduce repetitive lines.
|
||||
|
||||
See the `example/` directory for an idea of capabilities, but here's a snippet:
|
||||
|
||||
```yaml
|
||||
__preamble:
|
||||
ssh_props:
|
||||
Port: 22
|
||||
IdentitiesOnly: yes
|
||||
ForwardX11: no
|
||||
|
||||
__uni_template:
|
||||
template: __preamble
|
||||
ssh_props:
|
||||
IdentityFile: ~/.ssh/computer_labs_key
|
||||
User: emiliko
|
||||
|
||||
undergrad:
|
||||
template: __uni_template
|
||||
ssh_props:
|
||||
Hostname: ug22.cs.ualberta.ca
|
||||
|
||||
ohaton:
|
||||
template: __uni_template
|
||||
ssh_props:
|
||||
Hostname: ohaton.cs.ualberta.ca
|
||||
|
||||
coronation:
|
||||
template: __uni_template
|
||||
ssh_props:
|
||||
Hostname: coronation.cs.ualberta.ca
|
||||
```
|
||||
|
||||
## Rules
|
||||
|
||||
The `src/ssh_config_to_yaml.py` script will assist in quickly migrating your
|
||||
existing config.
|
||||
|
||||
#### SSH Properties
|
||||
|
||||
Standard SSH config properties go under the `ssh_props` heading for every host.
|
||||
For example:
|
||||
|
||||
```sshconfig
|
||||
Host github.com
|
||||
Hostname github.com
|
||||
IdentityFile ~/.ssh/github_main
|
||||
LocalForward 3306 localhost:3306
|
||||
LocalForward 3302 localhost:3302
|
||||
LocalForward 3000 localhost:3000
|
||||
```
|
||||
|
||||
Becomes:
|
||||
|
||||
```yaml
|
||||
github.com:
|
||||
ssh_props:
|
||||
Hostname: github.com
|
||||
IdentityFile: ~/.ssh/github_main
|
||||
LocalForward:
|
||||
- 3306 localhost:3306
|
||||
- 3302 localhost:3302
|
||||
- 3000 localhost:3000
|
||||
```
|
||||
|
||||
Note that yaml does not support duplicate keys, so keys can take a list of
|
||||
properties instead to mimic repeated keys, as seen above.
|
||||
|
||||
#### Templates
|
||||
|
||||
Templates are "default" properties inherited from another host. Templates must
|
||||
be declared above the host that uses it. You can make a template-only host by
|
||||
declaring it with `__` at the start of the name. You can also use another host
|
||||
as a template.
|
||||
|
||||
```yaml
|
||||
__preamble:
|
||||
ssh_props:
|
||||
Port: 22
|
||||
IdentitiesOnly: yes
|
||||
ForwardX11: no
|
||||
|
||||
#############################################################################
|
||||
# Uni Computers
|
||||
#############################################################################
|
||||
__uni_template:
|
||||
template: __preamble
|
||||
ssh_props:
|
||||
IdentityFile: ~/.ssh/id_ed25519
|
||||
User: emiliko
|
||||
|
||||
ohaton:
|
||||
template: __uni_template
|
||||
ssh_props:
|
||||
Hostname: ohaton.cs.ualberta.ca
|
||||
|
||||
coronation:
|
||||
# Using __uni_template here would make more sense outside an example
|
||||
template: ohaton
|
||||
ssh_props:
|
||||
Hostname: coronation.cs.ualberta.ca
|
||||
```
|
||||
|
||||
Will generate:
|
||||
|
||||
```sshconfig
|
||||
Host ohaton:
|
||||
ForwardX11 no
|
||||
Hostname ohaton.cs.ualberta.ca
|
||||
IdentitiesOnly yes
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
Port 22
|
||||
User emiliko
|
||||
|
||||
Host coronation:
|
||||
ForwardX11 no
|
||||
Hostname coronation.cs.ualberta.ca
|
||||
IdentitiesOnly yes
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
Port: 22
|
||||
User emiliko
|
||||
```
|
||||
|
||||
As a note, properties inherited from templates will be overwritten entirely,
|
||||
even if they're multi-valued. For example:
|
||||
|
||||
```
|
||||
__uni:
|
||||
ssh_props:
|
||||
LocalForward:
|
||||
- 3306 localhost:3306
|
||||
- 3302 localhost:3302
|
||||
- 3000 localhost:3000
|
||||
|
||||
ohaton:
|
||||
template: __uni
|
||||
ssh_props:
|
||||
LocalForward:
|
||||
- 9000 localhost:9000
|
||||
```
|
||||
|
||||
Will overwrite all the `LocalForward` properties provided by the `__uni`
|
||||
template, generating:
|
||||
|
||||
```sshconfig
|
||||
Host ohaton
|
||||
LocalForward 9000 localhost:9000
|
||||
```
|
||||
|
||||
#### For loops
|
||||
|
||||
For loops allow simple substitution of a single variable over a range or set of
|
||||
values. Ranges must be numerical, but sets can be any arbitrary string. Multiple
|
||||
different for loops can be declared under the `for` section.
|
||||
|
||||
```yaml
|
||||
orca:
|
||||
ssh_props:
|
||||
Hostname: 10.42.43.1
|
||||
User emiliko
|
||||
for:
|
||||
- variable: port
|
||||
range:
|
||||
from: 9026
|
||||
to: 9042
|
||||
template: LocalForward ${port} localhost:${port}
|
||||
- variable: env
|
||||
range: ["FOO=bar", "BAR=foo"]
|
||||
template: SendEnv ${env}
|
||||
```
|
||||
|
||||
Expands to:
|
||||
|
||||
```sshconfig
|
||||
Host orca
|
||||
Hostname 10.42.43.1
|
||||
LocalForward 9026 localhost:9026
|
||||
LocalForward 9027 localhost:9027
|
||||
LocalForward 9028 localhost:9028
|
||||
LocalForward 9029 localhost:9029
|
||||
LocalForward 9030 localhost:9030
|
||||
LocalForward 9031 localhost:9031
|
||||
LocalForward 9032 localhost:9032
|
||||
LocalForward 9033 localhost:9033
|
||||
LocalForward 9034 localhost:9034
|
||||
LocalForward 9035 localhost:9035
|
||||
LocalForward 9036 localhost:9036
|
||||
LocalForward 9037 localhost:9037
|
||||
LocalForward 9038 localhost:9038
|
||||
LocalForward 9039 localhost:9039
|
||||
LocalForward 9040 localhost:9040
|
||||
LocalForward 9041 localhost:9041
|
||||
SendEnv FOO=bar
|
||||
SendEnv BAR=foo
|
||||
User emiliko
|
||||
```
|
||||
|
||||
For loops can be part of templates
|
Loading…
Reference in a new issue