improved SSH completions

- use __fish_complete_ssh also for sftp
- removed old options -1 and -2
- added several newer options
- cleaned up and sorted completion code
This commit is contained in:
exploide 2021-03-16 19:48:10 +01:00 committed by Johannes Altmanninger
parent d79f864072
commit 5eadee61c5
4 changed files with 159 additions and 113 deletions

View file

@ -1,8 +1,7 @@
# # Load completions shared by various ssh tools like ssh, scp and sftp.
# Load completions shared by ssh and scp.
#
__fish_complete_ssh scp __fish_complete_ssh scp
# Helper functions to simplify the completions. # Helper functions to simplify the completions.
function __scp2ssh_port_number function __scp2ssh_port_number
# There is a silly inconsistency between the ssh and scp commands regarding the short flag name # There is a silly inconsistency between the ssh and scp commands regarding the short flag name
@ -58,10 +57,11 @@ complete -c scp -d "Remote Path" -f -n "commandline -ct | string match -e ':'" -
string escape -n string escape -n
) )
" "
complete -c scp -s 3 -d "Copies between two remote hosts are transferred through the local host"
complete -c scp -s B -d "Batch mode" complete -c scp -s B -d "Batch mode"
complete -c scp -s l -x -d "Bandwidth limit" complete -c scp -s l -x -d "Bandwidth limit"
complete -c scp -s P -x -d Port complete -c scp -s P -x -d Port
complete -c scp -s p -d "Preserves modification times, access times, and modes from the original file" complete -c scp -s p -d "Preserves modification times, access times, and modes from the original file"
complete -c scp -s q -d "Do not display progress bar"
complete -c scp -s r -d "Recursively copy" complete -c scp -s r -d "Recursively copy"
complete -c scp -s S -d "Encryption program" complete -c scp -s S -d "Encryption program"
complete -c scp -s T -d "Disable strict filename checking"

View file

@ -1,24 +1,18 @@
# Load completions shared by various ssh tools like ssh, scp and sftp.
__fish_complete_ssh sftp
complete -c sftp -x -a "(__fish_complete_user_at_hosts)" complete -c sftp -x -a "(__fish_complete_user_at_hosts)"
complete -c sftp -s 4 -d 'Use IPv4 addresses only'
complete -c sftp -s 6 -d 'Use IPv6 addresses only'
complete -c sftp -s a -d 'Attempt to continue interrupted transfers' complete -c sftp -s a -d 'Attempt to continue interrupted transfers'
complete -c sftp -s B -x -d 'Size of the buffer when transferring files' complete -c sftp -s B -x -d 'Size of the buffer when transferring files'
complete -c sftp -s b -F -d 'Reads a series of commands from an input batchfile' complete -c sftp -s b -F -d 'Reads a series of commands from an input batchfile'
complete -c sftp -s C -d 'Enables compression' complete -c sftp -s D -x -d 'Connect directly to a local SFTP server'
complete -c sftp -s c -x -d 'The cipher to use for encrypting data'
complete -c sftp -s D -x -d 'Connect directly to a local sftp server'
complete -c sftp -s F -F -d 'Alternative per-user configuration file'
complete -c sftp -s f -d 'Flush files to disk after transfer' complete -c sftp -s f -d 'Flush files to disk after transfer'
complete -c sftp -s i -F -d 'Identity (private key) file'
complete -c sftp -s J -x -a "(__fish_complete_user_at_hosts)" -d 'ProxyJump host'
complete -c sftp -s l -x -d 'Limits the used bandwidth (Kbit/s)' complete -c sftp -s l -x -d 'Limits the used bandwidth (Kbit/s)'
complete -c sftp -s o -x -d 'Set additional ssh_config options' complete -c sftp -s N -d 'Disables quiet mode'
complete -c sftp -s P -x -d 'Port to connect to on the remote host' complete -c sftp -s P -x -d 'Port to connect to on the remote host'
complete -c sftp -s p -d 'Preserve timestamps from the original files transferred' complete -c sftp -s p -d 'Preserve timestamps from the original files transferred'
complete -c sftp -s q -d 'Quiet mode'
complete -c sftp -s R -x -d 'How many requests may be outstanding' complete -c sftp -s R -x -d 'How many requests may be outstanding'
complete -c sftp -s r -d 'Recursively copy entire directories' complete -c sftp -s r -d 'Recursively copy entire directories'
complete -c sftp -s S -r -d 'Program to use for the encrypted connection' complete -c sftp -s S -r -d 'Program to use for the encrypted connection'
complete -c sftp -s s -x -d 'The SSH2 subsystem or the path for an sftp server' complete -c sftp -s s -x -d 'The SSH2 subsystem or the path for an sftp server'
complete -c sftp -s v -d 'Raise logging level'

View file

@ -1,53 +1,49 @@
# # Load completions shared by various ssh tools like ssh, scp and sftp.
# Load completions shared by ssh and scp.
#
__fish_complete_ssh ssh __fish_complete_ssh ssh
# #
# ssh specific completions # ssh specific completions
# #
complete -x -c ssh -d Remote -a "(__fish_complete_user_at_hosts)"
# Disable as username completion is not very useful.
# complete -x -c ssh -d User -a "
# (__fish_print_users | string match -r -v '^_')@
# "
complete -c ssh -n 'test (__fish_number_of_cmd_args_wo_opts) -ge 2' -d "Command to run" -x -a '(__fish_complete_subcommand --fcs-skip=2)'
complete -c ssh -s a -d "Disables forwarding of the authentication agent"
complete -c ssh -s A -d "Enables forwarding of the authentication agent"
complete -x -c ssh -s b -d "Local address to bind to" -a '(__fish_print_addresses)'
complete -x -c ssh -s e -d "Escape character" -a "\^ none"
complete -c ssh -s f -d "Go to background"
complete -c ssh -s g -d "Allow remote host to connect to local forwarded ports"
complete -c ssh -s I -d "Smartcard device"
complete -c ssh -s k -d "Disable forwarding of Kerberos tickets"
complete -c ssh -s l -x -a "(__fish_complete_users)" -d User
complete -c ssh -s m -d "MAC algorithm"
complete -c ssh -s n -d "Prevent reading from stdin"
complete -c ssh -s N -d "Do not execute remote command"
complete -c ssh -s p -x -d Port
complete -c ssh -s q -d "Quiet mode"
complete -c ssh -s s -d Subsystem
complete -c ssh -s t -d "Force pseudo-tty allocation"
complete -c ssh -s T -d "Disable pseudo-tty allocation"
complete -c ssh -s x -d "Disable X11 forwarding"
complete -c ssh -s X -d "Enable X11 forwarding"
complete -c ssh -s L -d "Locally forwarded ports"
complete -c ssh -s R -d "Remotely forwarded ports"
complete -c ssh -s D -d "Dynamic port forwarding"
complete -c ssh -s c -d "Encryption cipher" -xa "(ssh -Q cipher)"
# Also retrieve `user@host` entries from history # Also retrieve `user@host` entries from history
function __ssh_history_completions --argument-names limit function __ssh_history_completions
if string match -q "" history --prefix ssh --max=100 | string replace -rf '.* ([A-Za-z0-9._:-]+@[A-Za-z0-9._:-]+).*' '$1'
set limit 100
end
history --prefix ssh --max=$limit | string replace -rf '.* ([A-Za-z0-9._:-]+@[A-Za-z0-9._:-]+).*' '$1'
end end
complete -k -c ssh -a '(__ssh_history_completions 100)' -f -d Remote complete -c ssh -d Remote -xa "(__fish_complete_user_at_hosts)"
complete -c ssh -d Remote -k -fa '(__ssh_history_completions)'
complete -c ssh -n 'test (__fish_number_of_cmd_args_wo_opts) -ge 2' -d "Command to run" -xa '(__fish_complete_subcommand --fcs-skip=2)'
complete -c ssh -s a -d "Disables forwarding of the authentication agent"
complete -c ssh -s B -d "Bind to the address of that interface" -xa '(__fish_print_interfaces)'
complete -c ssh -s b -d "Local address to bind to" -xa '(__fish_print_addresses)'
complete -c ssh -s E -d "Append debug logs to log_file" -rF
complete -c ssh -s e -d "Escape character" -xa "\^ none"
complete -c ssh -s f -d "Go to background"
complete -c ssh -s G -d "Print configuration after evaluating Host"
complete -c ssh -s g -d "Allow remote host to connect to local forwarded ports"
complete -c ssh -s I -d "Specify the PKCS#11 library" -r
complete -c ssh -s K -d "Enables GSSAPI-based authentication"
complete -c ssh -s k -d "Disables forwarding of GSSAPI credentials"
complete -c ssh -s L -d "Specify local port forwarding" -x
complete -c ssh -s l -x -a "(__fish_complete_users)" -d User
complete -c ssh -s M -d "Places the ssh client into master mode"
complete -c ssh -s m -d "MAC algorithm" -xa "(__fish_complete_list , __fish_ssh_macs)"
complete -c ssh -s N -d "Do not execute remote command"
complete -c ssh -s n -d "Prevent reading from stdin"
complete -c ssh -s O -d "Control an active connection multiplexing master process" -x
complete -c ssh -s p -d Port -x
complete -c ssh -s Q -d "List supported algorithms" -xa "(ssh -Q help)"
complete -c ssh -s R -d "Specify remote/reverse port forwarding" -x
complete -c ssh -s S -d "Location of a control socket for connection sharing" -r
complete -c ssh -s s -d Subsystem
complete -c ssh -s T -d "Disable pseudo-tty allocation"
complete -c ssh -s t -d "Force pseudo-tty allocation"
complete -c ssh -s V -d "Display version number"
complete -c ssh -s W -d "Forward stdin/stdout to host:port over secure channel" -x
complete -c ssh -s w -d "Requests tunnel device forwarding" -x
complete -c ssh -s X -d "Enable X11 forwarding"
complete -c ssh -s x -d "Disable X11 forwarding"
complete -c ssh -s Y -d "Enables trusted X11 forwarding"
complete -c ssh -s y -d "Send log information using syslog"

View file

@ -1,58 +1,114 @@
function __fish_complete_ssh -d "common completions for ssh commands" --argument-names command function __fish_complete_ssh -d "common completions for ssh commands" --argument-names command
complete -c $command -s 1 -d "Protocol version 1 only" complete -c $command -s 4 -d "IPv4 only"
complete -c $command -s 2 -d "Protocol version 2 only" complete -c $command -s 6 -d "IPv6 only"
complete -c $command -s 4 -d "IPv4 addresses only" complete -c $command -s A -d "Enables forwarding of the authentication agent"
complete -c $command -s 6 -d "IPv6 addresses only"
complete -c $command -s C -d "Compress all data" complete -c $command -s C -d "Compress all data"
complete -xc $command -s c -d "Encryption algorithm" -a "blowfish 3des des" complete -c $command -s c -d "Encryption algorithm" -xa "(__fish_complete_list , __fish_ssh_ciphers)"
complete -r -c $command -s F -d "Configuration file" complete -c $command -s F -d "Configuration file" -rF
complete -r -c $command -s i -d "Identity file" complete -c $command -s i -d "Identity key file" -rF
complete -x -c $command -s o -d Options -a " complete -c $command -s J -d 'ProxyJump host' -xa "(__fish_complete_user_at_hosts)"
complete -c $command -s o -d Options -xa "
AddKeysToAgent
AddressFamily AddressFamily
BatchMode BatchMode
BindAddress BindAddress
BindInterface
CanonicalDomains
CanonicalizeFallbackLocal
CanonicalizeHostname
CanonicalizeMaxDots
CanonicalizePermittedCNAMEs
CASignatureAlgorithms
CertificateFile
ChallengeResponseAuthentication ChallengeResponseAuthentication
CheckHostIP CheckHostIP
Cipher
Ciphers Ciphers
ClearAllForwardings
Compression Compression
CompressionLevel
ConnectionAttempts ConnectionAttempts
ConnectTimeout ConnectTimeout
ControlMaster ControlMaster
ControlPath ControlPath
ControlPersist
DynamicForward
EscapeChar
ExitOnForwardFailure
FingerprintHash
ForwardAgent
ForwardX11
ForwardX11Timeout
ForwardX11Trusted
GatewayPorts
GlobalKnownHostsFile GlobalKnownHostsFile
GSSAPIAuthentication GSSAPIAuthentication
GSSAPIClientIdentity
GSSAPIDelegateCredentials GSSAPIDelegateCredentials
GSSAPIKexAlgorithms
GSSAPIKeyExchange
GSSAPIRenewalForcesRekey
GSSAPIServerIdentity
GSSAPITrustDns
HashKnownHosts
Host Host
HostbasedAuthentication HostbasedAuthentication
HostbasedKeyTypes
HostKeyAlgorithms HostKeyAlgorithms
HostKeyAlias HostKeyAlias
HostName Hostname
IdentityFile
IdentitiesOnly IdentitiesOnly
IdentityAgent
IdentityFile
IPQoS
KbdInteractiveAuthentication
KbdInteractiveDevices
KexAlgorithms
LocalCommand
LocalForward
LogLevel LogLevel
MACs MACs
Match
NoHostAuthenticationForLocalhost NoHostAuthenticationForLocalhost
NumberOfPasswordPrompts NumberOfPasswordPrompts
PasswordAuthentication PasswordAuthentication
PermitLocalCommand
PKCS11Provider
Port Port
PreferredAuthentications PreferredAuthentications
Protocol
ProxyCommand ProxyCommand
ProxyJump
ProxyUseFdpass
PubkeyAcceptedKeyTypes
PubkeyAuthentication PubkeyAuthentication
RhostsRSAAuthentication RekeyLimit
RSAAuthentication RemoteCommand
RemoteForward
RequestTTY
SendEnv SendEnv
ServerAliveInterval
ServerAliveCountMax ServerAliveCountMax
SmartcardDevice ServerAliveInterval
SetEnv
StreamLocalBindMask
StreamLocalBindUnlink
StrictHostKeyChecking StrictHostKeyChecking
TCPKeepAlive TCPKeepAlive
UsePrivilegedPort Tunnel
TunnelDevice
UpdateHostKeys
User User
UserKnownHostsFile UserKnownHostsFile
VerifyHostKeyDNS VerifyHostKeyDNS
VisualHostKey
XAuthLocation
" "
complete -c $command -s q -d "Quiet mode"
complete -c $command -s v -d "Verbose mode" complete -c $command -s v -d "Verbose mode"
end end
function __fish_ssh_ciphers -d "List of possible SSH cipher algorithms"
ssh -Q cipher
end
function __fish_ssh_macs -d "List of possible SSH MAC algorithms"
ssh -Q mac
end