Compare commits

..

No commits in common. "master" and "v1.0.0" have entirely different histories.

2 changed files with 9 additions and 50 deletions

View File

@ -40,13 +40,11 @@ You can also try using this script with a different daemon (or your own custom s
6. Create a short bash script inside the dispatcher directory that will launch connection-specific-ssh-config. For instance, you might name this file ```/etc/NetworkManager/dispatcher.d/99-launch-connection-specific-ssh-config``` 6. Create a short bash script inside the dispatcher directory that will launch connection-specific-ssh-config. For instance, you might name this file ```/etc/NetworkManager/dispatcher.d/99-launch-connection-specific-ssh-config```
7. Inside your launcher script, put the following contents: 7. Inside your launcher script, put the following contents:
``` ```
#!/bin/bash #!/bin/bash
/path/to/connection-specific-ssh-config "$1" "$2" "/path/to/connection-specific-ssh-config.ini" /path/to/connection-specific-ssh-config "$1" "$2" "/path/to/connection-specific-ssh-config.ini"
``` ```
This will take the two important variables which NetworkManager has passed along to your launcher script, and pass them along to connection-specific-ssh-config This will take the two important variables which NetworkManager has passed along to your launcher script, and pass them along to connection-specific-ssh-config
8. Repeat steps 2-7 for each additional user who would like connection based ssh configuration files. 8. Repeat steps 2-7 for each additional user who would like connection based ssh configuration files.
@ -103,6 +101,4 @@ ssh_config_name = config-home
The above configuration file will instruct the script to use the ssh configuration file */home/mike/.ssh/config-work* while you're connected to one of your work connections *Work Connection - Main Office* or *Work Connection - Garys Office*, on either of your wireless adapters *wlan0* or *wlan1*. When you get home and connect to your *My Home Connection (Oh Joy)* connection on *wlan0*, the config file */home/mike/.ssh/config-home* will be used instead. Finally, the configuration file */home/mike/.ssh/config-default* will be used when *wlan0* connects to some undefined network. The above configuration file will instruct the script to use the ssh configuration file */home/mike/.ssh/config-work* while you're connected to one of your work connections *Work Connection - Main Office* or *Work Connection - Garys Office*, on either of your wireless adapters *wlan0* or *wlan1*. When you get home and connect to your *My Home Connection (Oh Joy)* connection on *wlan0*, the config file */home/mike/.ssh/config-home* will be used instead. Finally, the configuration file */home/mike/.ssh/config-default* will be used when *wlan0* connects to some undefined network.
The script works by simply creating a symlink where your original ssh configuration file was (typically *~/.ssh/config*), pointing to the ssh configuration determined to be the one you want active. Note that this of course means the script will fail (for safety reasons), if your original ssh configuration file still exists as a normal file.

View File

@ -52,22 +52,12 @@ class SSHConfiger:
self.complain(s) self.complain(s)
raise Exception(s) raise Exception(s)
def quit(self, s):
#
self.log("Quitting because: " + s)
sys.exit(0)
# #
def run(self): def run(self):
# #
self.log("Running for interface \""+ self._action_interface +"\": " + self._action_command) self.log("Running for interface \""+ self._action_interface +"\": " + self._action_command)
# Only run if an interface is coming up
if ( self._action_command != "up" ):
self.quit("We don't need to run for action command: " + str(self._action_command))
# Parse the config # Parse the config
self.parse_config() self.parse_config()
@ -75,13 +65,9 @@ class SSHConfiger:
if ( "ssh_dir" not in self._config.keys() ): if ( "ssh_dir" not in self._config.keys() ):
self.die("Config file needs key \"ssh_dir\" inside \"config\" section") self.die("Config file needs key \"ssh_dir\" inside \"config\" section")
ssh_dir = self._config["ssh_dir"] ssh_dir = self._config["ssh_dir"]
self.log("SSH Dir: " + str(ssh_dir))
# Determine which ssh config file we should use # Determine which ssh config file we should use
ssh_config_name = self.determine_ssh_config_name() ssh_config_name = self.determine_ssh_config_name()
self.log("Determined ssh config name: " + str(ssh_config_name))
if not ssh_config_name:
self.die("Unable to determine appropriate ssh config name; Quitting")
# Make paths # Make paths
ssh_config_path_link = os.path.join(ssh_dir, "config") ssh_config_path_link = os.path.join(ssh_dir, "config")
@ -115,8 +101,9 @@ class SSHConfiger:
# #
def determine_ssh_config_name(self): def determine_ssh_config_name(self):
# # Only run if an interface is coming up
self.log("Attempting to determine SSH config name") if ( self._action_command != "up" ):
return None
# Check each section # Check each section
found_ssh_config_name = None found_ssh_config_name = None
@ -124,45 +111,23 @@ class SSHConfiger:
# #
section = self._targets[section_name] section = self._targets[section_name]
self.log("Examining section: " + str(section_name))
# Don't examine default if anything is picked already # Must match at least one interface
if section_name == "default" and found_ssh_config_name: if ( self._action_interface not in section["adapters"] ):
self.log("Skipping default section because we've already found at least one match: " + str(found_ssh_config_name))
continue continue
# Check the interface #
interface_matched = False
if (
# Matches, if current interface found in adapters
self._action_interface in section["adapters"]
# Can also match if we're in section "default"
or section_name == "default"
):
interface_matched = True
if not interface_matched:
self.log("Section \"" + str(section_name) + "\" didn't match any interfaces; Skipping")
continue
# Grab the SSID this adapter is currently connected to
interface_ssid = self.get_interface_ssid(self._action_interface) interface_ssid = self.get_interface_ssid(self._action_interface)
if not interface_ssid:
self.log("Interface \"" + str(interface_ssid) + "\" isn't connected to anything ... ")
self.log("Interface \"" + str(self._action_interface) + "\" is currently connected to: \"" + str(interface_ssid) + "\"")
# Must also match at least one SSID, # Must also match at least one SSID
# OR we're in the default section if ( interface_ssid not in section["ssids"] ):
if interface_ssid not in section["ssids"] and section_name != "default":
self.log("Did not find SSID \"" + interface_ssid + "\" in section ssids: " + str(section["ssids"]))
continue continue
# Found a match! # Found a match!
found_ssh_config_name = section["ssh_config_name"] found_ssh_config_name = section["ssh_config_name"]
self.log("Found matching ssh config name: " + str(found_ssh_config_name))
# Didn't find anything? Go default ... # Didn't find anything? Go default ...
if (not found_ssh_config_name): if (found_ssh_config_name == None):
if ( "default" in self._targets.keys() ): if ( "default" in self._targets.keys() ):
if ( "ssh_config_name" in self._targets["default"].keys() ): if ( "ssh_config_name" in self._targets["default"].keys() ):
found_ssh_config_name = self._targets["default"]["ssh_config_name"] found_ssh_config_name = self._targets["default"]["ssh_config_name"]
@ -207,7 +172,6 @@ class SSHConfiger:
continue continue
# #
self.log("Parsing config target: \"" + section + "\"")
target = { target = {
"adapters" : [], "adapters" : [],
"ssids" : [] "ssids" : []
@ -233,7 +197,6 @@ class SSHConfiger:
# #
targets[section] = target targets[section] = target
self.log("Parsed config for config target \"" + section + "\": " + str(target))
# #
self._config = config self._config = config