Class OpenSshConfigFile
java.lang.Object
org.eclipse.jgit.internal.transport.ssh.OpenSshConfigFile
- All Implemented Interfaces:
SshConfigStore
Fairly complete configuration parser for the openssh ~/.ssh/config file.
Both JSch 0.1.54 and Apache MINA sshd 2.1.0 have parsers for this, but both are buggy. Therefore we implement our own parser to read an openssh configuration file.
Limitations compared to the full openssh 7.5 parser:
- This parser does not handle Match or Include keywords.
- This parser does not do host name canonicalization.
Note that openssh's readconf.c is a validating parser; this parser does not validate entries.
This config does %-substitutions for the following tokens:
- %% - single %
- %C - short-hand for %l%h%p%r.
- %d - home directory path
- %h - remote host name
- %L - local host name without domain
- %l - FQDN of the local host
- %n - host name as specified in
lookup(String, int, String)
- %p - port number; if not given in
lookup(String, int, String)
replaced only if set in the config - %r - remote user name; if not given in
lookup(String, int, String)
replaced only if set in the config - %u - local user name
%i is not handled; Java has no concept of a "user ID". %T is always replaced by NONE.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
A host entry from the ssh config file.private static class
private static class
Encapsulates entries read out of the configuration file, and a cache of fully resolved entries created from that.Nested classes/interfaces inherited from interface org.eclipse.jgit.transport.SshConfigStore
SshConfigStore.HostConfig
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final File
The .ssh/config file we read and monitor for updates.private static final String
"Host" name of the HostEntry for the default options before the first host block in a config file.private final File
The user's home directory, as key files may be relative to here.private Instant
Modification time ofconfigFile
when it was last loaded.private final String
User name of the user on the host OS.private OpenSshConfigFile.State
State read from the config file, plus the cache.Fields inherited from interface org.eclipse.jgit.transport.SshConfigStore
EMPTY_CONFIG
-
Constructor Summary
ConstructorsConstructorDescriptionOpenSshConfigFile
(File home, File config, String localUserName) Creates a newOpenSshConfigFile
that will read the config from fileconfig
use the given filehome
as "home" directory. -
Method Summary
Modifier and TypeMethodDescriptionprivate static String
static boolean
Converts a ssh config flag value (yes/true/on - no/false/off) into anboolean
.Retrieves the local user name as given in the constructor.private static boolean
isHostMatch
(String pattern, String name) Locate the configuration for a specific host request.private Map
<String, OpenSshConfigFile.HostEntry> parse
(BufferedReader reader) Splits the argument into a list of whitespace-separated elements.private static boolean
patternMatchesHost
(String pattern, String name) static int
Converts a positive value into anint
.private OpenSshConfigFile.State
refresh()
private static String
stripWhitespace
(String value) private String
toCacheKey
(String hostName, int port, String userName) private static File
toString()
protected String
Hook to perform validation on a single value, or to sanitize it.Hook to perform validation on values, or to sanitize them.
-
Field Details
-
DEFAULT_NAME
"Host" name of the HostEntry for the default options before the first host block in a config file.- See Also:
-
home
The user's home directory, as key files may be relative to here. -
configFile
The .ssh/config file we read and monitor for updates. -
localUserName
User name of the user on the host OS. -
lastModified
Modification time ofconfigFile
when it was last loaded. -
state
State read from the config file, plus the cache.
-
-
Constructor Details
-
OpenSshConfigFile
Creates a newOpenSshConfigFile
that will read the config from fileconfig
use the given filehome
as "home" directory.- Parameters:
home
- user's home directory for the purpose of ~ replacementconfig
- file to load.localUserName
- user name of the current user on the local host OS
-
-
Method Details
-
lookup
@NonNull public OpenSshConfigFile.HostEntry lookup(@NonNull String hostName, int port, String userName) Locate the configuration for a specific host request.- Specified by:
lookup
in interfaceSshConfigStore
- Parameters:
hostName
- the name the user has supplied to the SSH tool. This may be a real host name, or it may just be a "Host" block in the configuration file.port
- the user supplied; invalid input: '<'= 0 if noneuserName
- the user supplied, may benull
or empty if none given- Returns:
- the configuration for the requested name.
-
toCacheKey
-
refresh
-
parse
- Throws:
IOException
-
parseList
Splits the argument into a list of whitespace-separated elements. Elements containing whitespace must be quoted and will be de-quoted.- Parameters:
argument
- argument part of the configuration line as read from the config file- Returns:
- a
List
of elements, possibly empty and possibly containing empty elements, but not containingnull
-
validate
Hook to perform validation on a single value, or to sanitize it. If this throws an (unchecked) exception, parsing of the file is abandoned.- Parameters:
key
- of the entryvalue
- as read from the config file- Returns:
- the validated and possibly sanitized value
-
validate
Hook to perform validation on values, or to sanitize them. If this throws an (unchecked) exception, parsing of the file is abandoned.- Parameters:
key
- of the entryvalue
- list of arguments as read from the config file- Returns:
- a
List
of values, possibly empty and possibly containing empty elements, but not containingnull
-
isHostMatch
-
patternMatchesHost
-
dequote
-
stripWhitespace
-
toFile
-
positive
Converts a positive value into anint
.- Parameters:
value
- to convert- Returns:
- the value, or -1 if it wasn't a positive integral value
-
flag
Converts a ssh config flag value (yes/true/on - no/false/off) into anboolean
.- Parameters:
value
- to convert- Returns:
true
ifvalue
is "yes", "on", or "true";false
otherwise
-
getLocalUserName
Retrieves the local user name as given in the constructor.- Returns:
- the user name
-
toString
-