项目作者: blacknon

项目描述 :
List selection type alternative ssh/scp/sftp client. Pure Go.
高级语言: Go
项目地址: git://github.com/blacknon/lssh.git
创建时间: 2017-01-02T15:52:47Z
项目社区:https://github.com/blacknon/lssh

开源协议:MIT License

下载


Go Report Card

lssh

TUI list select ssh/scp/sftp client tools.

Description

This command utility to read a prepared list in advance and connect ssh/scp/sftp the selected host.
List file is set in yaml format.
When selecting a host, you can filter by keywords.
Can execute commands concurrently to multiple hosts.

lsftp shells can be connected in parallel.

Supported multiple ssh proxy, http/socks5 proxy, x11 forward, and port forwarding.

Features

  • List selection type Pure Go ssh client.
  • It can run on Linux, macOS and Windows.
  • Commands can be executed by ssh connection in parallel.
  • There is a shell function that connects to multiple hosts in parallel for interactive operation and connects with local commands via pipes.
  • Supported multiple proxy, ssh, http, and socks5 proxy. It’s supported multi-stage proxy.
  • Supported ssh-agent.
  • Supported Local and Remote Port forward, Dynamic Forward(SOCKS5, http), Reverse Dynamic Forward(SOCKS5, http) and x11 forward.
  • By using NFS Forward/NFS Reverse Forward, the NFS server starts listening to the PATH of the local host or remote machine, making it available via local port forwarding.
  • Can use bashrc of local machine at ssh connection destination.
  • It supports various authentication methods. Password, Public key, Certificate and PKCS11(Yubikey etc.).
  • Can read the OpenSSH config (~/.ssh/config) and use it as it is.

Demo



Install

compile

compile gofile(tested go1.22.5).

  1. GO111MODULE=auto go get -u github.com/blacknon/lssh/cmd/lssh
  2. GO111MODULE=auto go get -u github.com/blacknon/lssh/cmd/lscp
  3. GO111MODULE=auto go get -u github.com/blacknon/lssh/cmd/lsftp
  4. # copy sample config. create `~/.lssh.conf`.
  5. test -f ~/.lssh.conf||curl -s https://raw.githubusercontent.com/blacknon/lssh/master/example/config.tml -o ~/.lssh.conf

or

  1. git clone https://github.com/blacknon/lssh
  2. cd lssh
  3. GO111MODULE=auto make && sudo make install
  4. # copy sample config. create `~/.lssh.conf`.
  5. test -f ~/.lssh.conf||curl -s https://raw.githubusercontent.com/blacknon/lssh/master/example/config.tml -o ~/.lssh.conf

brew install

brew install(Mac OS X)

  1. brew tap blacknon/lssh
  2. brew install lssh
  3. # copy sample config. create `~/.lssh.conf`.
  4. test -f ~/.lssh.conf||curl -s https://raw.githubusercontent.com/blacknon/lssh/master/example/config.tml -o ~/.lssh.conf

Config

Please edit “~/.lssh.conf”.\
For details see wiki.

Usage

lssh

run command.

  1. lssh

option(lssh)

  1. NAME:
  2. lssh - TUI list select and parallel ssh client command.
  3. USAGE:
  4. lssh [options] [commands...]
  5. OPTIONS:
  6. --host servername, -H servername connect servername.
  7. --file filepath, -F filepath config filepath. (default: "/Users/blacknon/.lssh.conf")
  8. -L [bind_address:]port:remote_address:port Local port forward mode.Specify a [bind_address:]port:remote_address:port. Only single connection works.
  9. -R [bind_address:]port:remote_address:port Remote port forward mode.Specify a [bind_address:]port:remote_address:port. If only one port is specified, it will operate as Reverse Dynamic Forward. Only single connection works.
  10. -D port Dynamic port forward mode(Socks5). Specify a port. Only single connection works.
  11. -d port HTTP Dynamic port forward mode. Specify a port. Only single connection works.
  12. -r port HTTP Reverse Dynamic port forward mode. Specify a port. Only single connection works.
  13. -M port:/path/to/remote NFS Dynamic forward mode. Specify a port:/path/to/remote. Only single connection works.
  14. -m port:/path/to/local NFS Reverse Dynamic forward mode. Specify a port:/path/to/local. Only single connection works.
  15. -w Displays the server header when in command execution mode.
  16. -W Not displays the server header when in command execution mode.
  17. --not-execute, -N not execute remote command and shell.
  18. --X11, -X Enable x11 forwarding(forward to ${DISPLAY}).
  19. -Y Enable trusted x11 forwarding(forward to ${DISPLAY}).
  20. --term, -t run specified command at terminal.
  21. --parallel, -p run command parallel node(tail -F etc...).
  22. --localrc use local bashrc shell.
  23. --not-localrc not use local bashrc shell.
  24. --list, -l print server list from config.
  25. --help, -h print this help
  26. --version, -v print the version
  27. COPYRIGHT:
  28. blacknon(blacknon@orebibou.com)
  29. VERSION:
  30. 0.6.12
  31. USAGE:
  32. # connect ssh
  33. lssh
  34. # run command selected server over ssh.
  35. lssh command...
  36. # run command parallel in selected server over ssh.
  37. lssh -p command...

lscpd

run command.

  1. lscp from... to

option(lscp)

  1. NAME:
  2. lscp - TUI list select and parallel scp client command.
  3. USAGE:
  4. lscp [options] (local|remote):from_path... (local|remote):to_path
  5. OPTIONS:
  6. --host value, -H value connect servernames
  7. --list, -l print server list from config
  8. --file value, -F value config file path (default: "/Users/blacknon/.lssh.conf")
  9. --permission, -p copy file permission
  10. --help, -h print this help
  11. --version, -v print the version
  12. COPYRIGHT:
  13. blacknon(blacknon@orebibou.com)
  14. VERSION:
  15. 0.6.12
  16. USAGE:
  17. # local to remote scp
  18. lscp /path/to/local... remote:/path/to/remote
  19. # remote to local scp
  20. lscp remote:/path/to/remote... /path/to/local
  21. # remote to remote scp
  22. lscp remote:/path/to/remote... remote:/path/to/local

lsftp

run command.

  1. lsftp

option(lsftp)

  1. NAME:
  2. lsftp - TUI list select and parallel sftp client command.
  3. USAGE:
  4. lsftp [options]
  5. OPTIONS:
  6. --file value, -F value config file path (default: "/Users/blacknon/.lssh.conf")
  7. --help, -h print this help
  8. --version, -v print the version
  9. COPYRIGHT:
  10. blacknon(blacknon@orebibou.com)
  11. VERSION:
  12. 0.6.12
  13. USAGE:
  14. # start lsftp shell
  15. lsftp

If you specify a command as an argument, you can select multiple hosts. Select host Tab, select all displayed hosts Ctrl + a.

1. [lssh] connect terminal



You can connect to the terminal like a normal ssh command (OpenSSH).






You can connect using a local bashrc file (if ssh login shell is bash).





~/.lssh.conf example.

[server.localrc]
addr = “192.168.100.104”
key = “/path/to/private_key”
note = “Use local bashrc files.”
local_rc = ‘yes’
local_rc_compress = true # gzip compress localrc file data
local_rc_file = [
“~/dotfiles/.bashrc”
,”~/dotfiles/bash_prompt”
,”~/dotfiles/sh_alias”
,”~/dotfiles/sh_export”
,”~/dotfiles/sh_function”
]


You can execute commands before and after ssh connection.\
You can also change the color of each host’s terminal by combining it with the OSC escape sequence.

if iTerm2, you can also change the profile.






~/.lssh.conf example.

[server.iTerm2_sample]
addr = “192.168.100.103”
key = “/path/to/private_key”
note = “Before/After run local command”
pre_cmd = ‘printf “\033]50;SetProfile=Theme\a”‘ # ssh theme
post_cmd = ‘printf “\033]50;SetProfile=Default\a”‘ # local theme
note = “(option) exec command after ssh disconnected.”

[server.GnomeTerminal_sample]
addr = “192.168.100.103”
key = “/path/to/private_key”
note = “Before/After run local command”
pre_cmd = ‘printf “\e]10;#ffffff\a\e]11;#503000\a”‘ # ssh color
post_cmd = ‘printf “\e]10;#ffffff\a\e]11;#000000\a”‘ # local color
note = “(option) exec command after ssh disconnected.”


A terminal log can be recorded by writing a configuration file.

~/.lssh.conf example.

[log]
enable = true
timestamp = true
dirpath = “~/log/lssh//


There are other parameters corresponding to ClientAliveInterval and ClientAliveCountMax.

[server.alivecount]
addr = “192.168.100.101”
key = “/path/to/private_key”
note = “alive count max.”
alive_max = 3 # ServerAliveCountMax
alive_interval = 60 # ServerAliveCountInterval


2. [lssh] run command (with parallel)



It is possible to execute by specifying command in argument.\
Parallel execution can be performed by adding the -p option.





# exec command over ssh.
lssh

# exec command over ssh, parallel.
lssh -p


In parallel connection mode (-p option), Stdin can be sent to each host.\






Can be piped to send Stdin.





# You can pass values ​​in a pipe
command… | lssh


3. [lscp] scp (local=>remote(multi), remote(multi)=>local, remote=>remote(multi))



You can do scp by selecting a list with the command lscp.\
You can select multiple connection destinations. This program use sftp protocol.





local => remote(multiple)

# lscp local => remote(multiple)
lscp /path/to/local… r:/path/to/remote


remote(multiple) => local

# lscp remote(multiple) => local
lscp r:/path/to/remote… /path/to/local


remote => remote(multiple)

# lscp remote => remote(multiple)
lscp r:/path/to/remote… r:/path/to/local


4. [lsftp] sftp (local=>remote(multi), remote(multi)=>local)



You can do sftp by selecting a list with the command lstp.\
You can select multiple connection destinations.





lsftp


5. include ~/.ssh/config file.



Load and use ~/.ssh/config by default.\
ProxyCommand can also be used.

Alternatively, you can specify and read the path as follows: In addition to the path, ServerConfig items can be specified and applied collectively.

[sshconfig.default]
path = “~/.ssh/config”
pre_cmd = ‘printf “\033]50;SetProfile=local\a”‘
post_cmd = ‘printf “\033]50;SetProfile=Default\a”‘

6. include other ServerConfig file.



You can include server settings in another file.\
common settings can be specified for each file that you went out.

~/.lssh.conf example.

[includes]
path = [
“~/.lssh.d/home.conf”
,”~/.lssh.d/cloud.conf”
]

~/.lssh.d/home.conf example.

[common]
pre_cmd = ‘printf “\033]50;SetProfile=dq\a”‘ # iterm2 ssh theme
post_cmd = ‘printf “\033]50;SetProfile=Default\a”‘ # iterm2 local theme
ssh_agent_key = [“~/.ssh/id_rsa”]
ssh_agent = false
user = “user”
key = “~/.ssh/id_rsa”
pkcs11provider = “/usr/local/lib/opensc-pkcs11.so”

[server.Server1]
addr = “172.16.200.1”
note = “TEST Server1”
local_rc = “yes”

[server.Server2]
addr = “172.16.200.2”
note = “TEST Server2”
local_rc = “yes”

The priority of setting values ​​is as follows.

[server.hogehoge] > [common] at Include file > [common] at ~/.lssh.conf


7. Supported Proxy



Supports multiple proxy.

http socks5
* ssh

Besides this, you can also specify ProxyCommand like OpenSSH.

http proxy example.

[proxy.HttpProxy]
addr = “example.com”
port = “8080”

[server.overHttpProxy]
addr = “over-http-proxy.com”
key = “/path/to/private_key”
note = “connect use http proxy”
proxy = “HttpProxy”
proxy_type = “http”


socks5 proxy example.

[proxy.Socks5Proxy]
addr = “example.com”
port = “54321”

[server.overSocks5Proxy]
addr = “192.168.10.101”
key = “/path/to/private_key”
note = “connect use socks5 proxy”
proxy = “Socks5Proxy”
proxy_type = “socks5”


ssh proxy example.

[server.sshProxyServer]
addr = “192.168.100.200”
key = “/path/to/private_key”
note = “proxy server”

[server.overProxyServer]
addr = “192.168.10.10”
key = “/path/to/private_key”
note = “connect use ssh proxy”
proxy = “sshProxyServer”

[server.overProxyServer2]
addr = “192.168.10.100”
key = “/path/to/private_key”
note = “connect use ssh proxy(multiple)”
proxy = “overProxyServer”


ProxyCommand proxy example.

[server.ProxyCommand]
addr = “192.168.10.20”
key = “/path/to/private_key”
note = “connect use ssh proxy(multiple)”
proxy_cmd = “ssh -W %h:%p proxy”


8. Available authentication method



Password auth Publickey auth
Certificate auth PKCS11 auth
* Ssh-Agent auth

password auth example.

[server.PasswordAuth]
addr = “password_auth.local”
user = “user”
pass = “Password”
note = “password auth server”


publickey auth example.

[server.PublicKeyAuth]
addr = “pubkey_auth.local”
user = “user”
key = “~/path/to/key”
note = “Public key auth server”

[server.PublicKeyAuth_with_passwd]
addr = “password_auth.local”
user = “user”
key = “~/path/to/key”
keypass = “passphrase”
note = “Public key auth server with passphrase”


cert auth example.\
(pkcs11 key is not supported in the current version.)

[server.CertAuth]
addr = “cert_auth.local”
user = “user”
cert = “~/path/to/cert”
certkey = “~/path/to/certkey”
note = “Certificate auth server”

[server.CertAuth_with_passwd]
addr = “cert_auth.local”
user = “user”
cert = “~/path/to/cert”
certkey = “~/path/to/certkey”
certkeypass = “passphrase”
note = “Certificate auth server with passphrase”


pkcs11 auth example.

[server.PKCS11Auth]
addr = “pkcs11_auth.local”
user = “user”
pkcs11provider = “/usr/local/lib/opensc-pkcs11.so”
pkcs11 = true
note = “PKCS11 auth server”

[server.PKCS11Auth_with_PIN]
addr = “pkcs11_auth.local”
user = “user”
pkcs11provider = “/usr/local/lib/opensc-pkcs11.so”
pkcs11 = true
pkcs11pin = “123456”
note = “PKCS11 auth server”


ssh-agent auth example.

[server.SshAgentAuth]
addr = “agent_auth.local”
user = “user”
agentauth = true # auth ssh-agent
note = “ssh-agent auth server”

9. Port forwarding



Supported Local/Remote/Dynamic port forwarding.\
You can specify from the command line or from the configuration file.

When using NFS forward, lssh starts the NFS server and begins listening on the specified port.
After that, the forwarded PATH can be used as a mount point on the local machine or the remote machine.

#### command line option

lssh -L 8080:localhost:80 # local port forwarding
lssh -R 80:localhost:8080 # remote port forwarding
lssh -D 10080 # dynamic port forwarding
lssh -R 10080 # Reverse Dynamic port forwarding
lssh -M port:/path/to/remote # NFS Dynamic forward.
lssh -m port:/path/to/local # NFS Reverse Dynamic forward.

#### config file

[server.LocalPortForward]
addr = “localforward.local”
user = “user”
agentauth = true
port_forward_local = “localhost:8080”
port_forward_remote = “localhost:80”
note = “local port forwawrd example”

[server.RemotePortForward]
addr = “remoteforward.local”
user = “user”
agentauth = true
port_forward = “REMOTE”
port_forward_local = “localhost:80”
port_forward_remote = “localhost:8080”
note = “remote port forwawrd example”

[server.DynamicForward]
addr = “dynamicforward.local”
user = “user”
agentauth = true
dynamic_port_forward = “11080”
note = “dynamic forwawrd example”

[server.ReverseDynamicForward]
addr = “reversedynamicforward.local”
user = “user”
agentauth = true
reverse_dynamic_port_forward = “11080”
note = “reverse dynamic forwawrd example”

If OpenSsh config is loaded, it will be loaded as it is.


Licence

A short snippet describing the license MIT.

Author

blacknon