Git Product home page Git Product logo

envssh's Introduction

envssh - Take your environment with you

Environment (friendly) SSH client.

Brings your environment with you to the remote machine including environment variables, configuration files and other.

Note: This is POC implementation and needs a lot of refactoring and more testing!

Installing

go get -u github.com/drodil/envssh

Usage

Tool behaves much like the normal ssh client. To connect to remote, simply run:

envssh [remote]

The remote should be either hostname or IP address and can include username and port which are used to connect f.eg. user@remote:1234.

On the first run, default configuration file will be created to $HOME/.ssh/envssh.yml. See Configuration section for details how to configure the tool.

Run envssh --help for more options.

Also check out short demo on Youtube:

envssh demo

Configuration

Configuration file is created automatically to $HOME/.ssh/envssh.yml. The file contains the following sections:

  • global - Global level configuration which can be overriden per hostname
    • env - Environment variables to move to the remote
      • static - Key-value pairs that are moved to the remote
      • moved - Keys from current environment that are evaluated and moved
    • files - List of files that are moved from local to the remote, each containing:
      • local - Local path of the file to move
      • remote - Destination path on the remote
    • commands - List of commands that are run on remote before starting the session
  • servers - Server specific configurations that override the global ones based on hostname
    • host - Hostname of the remote
    • port - Port that is used to connect to remote
    • aliases - List of aliases for this server, can be used instead hostname in destination
    • env - See above
    • files - See above
    • commands - See above

See example configuration file envssh.yml

Contributing

See CONTRIBUTING.md.

envssh's People

Contributors

drodil avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

envssh's Issues

Allow using scp for file transfer

Current functionality to move files is.. well, interesting. Add support for user to select the file transfer mode and add possibility to use scp instead the current base64 method.

Support for .ssh/config

Add support for .ssh/config file and use parameters from there for timeout, identityfile, known_hosts file, sendenv, host key algorithms etc. These configurations should be applied to the system first before the envssh specific configuration which can override the ones in openssh client configuration.

Allow running command instead interactive shell

Allow running command on remote server instead starting remote shell (just like normal ssh client works). If there is argument after the destination, use it as the command to be run at the remote.

Add timeout configuration

Add timeout configuration for host/global configuration and use it when client is dialing to the server.

Add SSH proxy support

Add proxy support for configuration file for global config and server specific config. This means the proxy host, port, username and password. In case proxy is set use it to connect to the target server. This is possible by using the:

proxyClient := ssh.Dial(proxy)
conn := proxyClient.Dial(target) // without config
clientConn, channels, reqs := ssh.NewClientConn(conn, targetConfig)
client := ssh.NewClient(clientConn, channels, reqs)

Allow configuring PTY term

Allow setting the PTY term for global/server specific configuration. Default should be 'auto' and work as it does currently but it should be possible to set this up based on host or globally.

Add aliases for server specific config

Add aliases for the server specific configuration and allow using the alias for connection destination instead the actual hostname or IP address. This enhancement would be very handy especially if you are only using IP addresses to connect to remotes.

For example:

envssh my_computer:1234

would find out ServerConfig with alias my_computer and user hostname from there

Add CLI option for SSH port

Add option to set SSH port with CLI option. The CLI option should override all other possibilities for the port including configuration file and remote.

Add CLI option for log file location

Add CLI option to set logfile location for the envssh. Pass this to the logger instance from main function to be used later on for all logging.

Wildcard for server specific configuration

Add possibility to add multiple servers to use the same configuration either with wildcard or list of hostnames. This would allow to differentiate the configuration to multiple servers without adding the configuration to global.

Get around the AcceptEnv

SetEnv only allows setting environment variables that are allowed by the SSH server in AcceptEnv configuration. It could be possible to get around this by using "export" command right after the interactive session has been started.

Fix Windows terminal size

Currently Windows defaults to terminal size 80x24 as it cannot get the correct w/h from terminal.GetSize. Also the resize event does not work due to missing SIGWINCH signal. Fix terminal size initialization and resizing.

See golang/go#20388

Automatic clean-up of copied files

When files are copied to remote they are currently left as they are. Allow user to select if they need to be cleaned up after disconnect. This would mean that existing files on the remote need to be backed up and restored when the interactive session is closed as well as the copied files need to be removed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.