refactor: more seamless SSH connections
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
9e0d77d5c6
commit
3d46ce6db2
|
@ -316,14 +316,10 @@ to start running Abra commands against it.
|
||||||
|
|
||||||
This command can also provision your server ("--provision/-p") so that it is
|
This command can also provision your server ("--provision/-p") so that it is
|
||||||
capable of hosting Co-op Cloud apps. Abra will default to expecting that you
|
capable of hosting Co-op Cloud apps. Abra will default to expecting that you
|
||||||
have a working SSH config for the host in your ~/.ssh/config file. E.g. for
|
have a running ssh-agent and are using SSH keys to connect to your new server.
|
||||||
"example.com", you'll want to have something like:
|
Abra will also read your SSH config (matching "Host" as <domain>). SSH
|
||||||
|
connection details precedence follows as such: command-line > SSH config >
|
||||||
Host example.com
|
guessed defaults.
|
||||||
Hostname 192.168.178.31 # domain name also works
|
|
||||||
User myuserontheserver
|
|
||||||
Port 12345
|
|
||||||
IdentityFile ~/.ssh/mysecretkey.local
|
|
||||||
|
|
||||||
If you have no SSH key configured for this host and are instead using password
|
If you have no SSH key configured for this host and are instead using password
|
||||||
authentication, you may pass "--ssh-auth password" to have Abra ask you for the
|
authentication, you may pass "--ssh-auth password" to have Abra ask you for the
|
||||||
|
@ -345,7 +341,7 @@ Example:
|
||||||
|
|
||||||
abra server add --provision --traefik varia.zone glodemodem 12345
|
abra server add --provision --traefik varia.zone glodemodem 12345
|
||||||
|
|
||||||
Abra will construct the following SSH connection string then:
|
Abra will construct the following SSH connection and Docker context:
|
||||||
|
|
||||||
ssh://globemodem@varia.zone:12345
|
ssh://globemodem@varia.zone:12345
|
||||||
|
|
||||||
|
|
|
@ -84,20 +84,7 @@ Your new Hetzner Cloud VPS has successfully been created! Here are the details:
|
||||||
VPS IP address: %s
|
VPS IP address: %s
|
||||||
VPS Root Password: %s
|
VPS Root Password: %s
|
||||||
|
|
||||||
Here is what your SSH configuration (~/.ssh/config) might look like:
|
You can access this new VPS via SSH using the following command:
|
||||||
|
|
||||||
Host %s.example.com
|
|
||||||
Hostname %s
|
|
||||||
User root
|
|
||||||
Port 22
|
|
||||||
IdentityFile ~/.ssh/<your-ssh-private-key>
|
|
||||||
|
|
||||||
Remember, your "Host" value must be a valid publicly accessible domain name as
|
|
||||||
Abra uses this domain to identity servers. If you specified "--ssh-auth
|
|
||||||
password" then you may skip the IdentityFile stanza.
|
|
||||||
|
|
||||||
Once your SSH client is configured, you can access this new VPS via SSH using
|
|
||||||
the following command:
|
|
||||||
|
|
||||||
ssh root@%s
|
ssh root@%s
|
||||||
|
|
||||||
|
@ -107,7 +94,6 @@ record new") and add the server to your Abra configuration ("abra server add")
|
||||||
to have a working server that you can deploy Co-op Cloud apps to.
|
to have a working server that you can deploy Co-op Cloud apps to.
|
||||||
`,
|
`,
|
||||||
internal.HetznerCloudName, ip, rootPassword,
|
internal.HetznerCloudName, ip, rootPassword,
|
||||||
internal.HetznerCloudName, ip,
|
|
||||||
ip,
|
ip,
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package ssh
|
package ssh
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"os/user"
|
"os/user"
|
||||||
|
|
||||||
"github.com/AlecAivazis/survey/v2"
|
"github.com/AlecAivazis/survey/v2"
|
||||||
|
@ -19,7 +18,7 @@ type HostConfig struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetHostConfig retrieves a ~/.ssh/config config for a host.
|
// GetHostConfig retrieves a ~/.ssh/config config for a host.
|
||||||
func GetHostConfig(hostname, username, port string, hasIdentityFile bool) (HostConfig, error) {
|
func GetHostConfig(hostname, username, port string) (HostConfig, error) {
|
||||||
var hostConfig HostConfig
|
var hostConfig HostConfig
|
||||||
|
|
||||||
var host, idf string
|
var host, idf string
|
||||||
|
@ -47,13 +46,12 @@ func GetHostConfig(hostname, username, port string, hasIdentityFile bool) (HostC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dummyVal := "~/.ssh/identity"
|
idf = ssh_config.Get(hostname, "IdentityFile")
|
||||||
if idf = ssh_config.Get(hostname, "IdentityFile"); (idf == dummyVal || idf == "") && hasIdentityFile {
|
|
||||||
return hostConfig, fmt.Errorf("SSH identity file missing for %s from SSH config", hostname)
|
|
||||||
}
|
|
||||||
|
|
||||||
hostConfig.Host = host
|
hostConfig.Host = host
|
||||||
hostConfig.IdentityFile = idf
|
if idf != "" {
|
||||||
|
hostConfig.IdentityFile = idf
|
||||||
|
}
|
||||||
hostConfig.Port = port
|
hostConfig.Port = port
|
||||||
hostConfig.User = username
|
hostConfig.User = username
|
||||||
|
|
||||||
|
@ -66,12 +64,7 @@ func GetHostConfig(hostname, username, port string, hasIdentityFile bool) (HostC
|
||||||
func New(domainName, sshAuth, username, port string) (*simplessh.Client, error) {
|
func New(domainName, sshAuth, username, port string) (*simplessh.Client, error) {
|
||||||
var client *simplessh.Client
|
var client *simplessh.Client
|
||||||
|
|
||||||
hasIdentityFile := true
|
hostConfig, err := GetHostConfig(domainName, username, port)
|
||||||
if sshAuth == "password" {
|
|
||||||
hasIdentityFile = false
|
|
||||||
}
|
|
||||||
|
|
||||||
hostConfig, err := GetHostConfig(domainName, username, port, hasIdentityFile)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return client, err
|
return client, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue