在启动SSH连接之前和SSH连接关闭之后,如何运行本地命令?

时间:2019-10-01 14:42:26

标签: bash ssh

基本上,我想做的是运行一个我创建的Bash脚本,该脚本在开始SSH连接之前和在SSH连接关闭之后切换WiFi SSID。

我通过将ProxyCommand设置为~/.ssh/config将其添加到./run-script; ssh %h:%p中,但是这样做,我感觉它会忽略我在运行ssh命令时传递的任何参数。另外,我不知道如何在SSH连接关闭时使脚本再次运行。

2 个答案:

答案 0 :(得分:1)

假设无法实现“ ssh”的包装器(使用别名或其他方法),则可以在proxyCommand中实现以下内容。

需要特别注意的是,没有针对“ ssh”的多次调用的保护措施-可能是在特定调用期间已经连接了WIFI。另外,当特定的ssh终止时,由于其他未决条件,WIFI必须保持活动状态。

代理脚本的可能实现是 ProxyCommand / path / to / run-script%h%p

#! /bin/sh
pre-command      # connect to WIFI
nc -N "$1" "$2"     # Tunnel, '%h' and '%p' are passed in
post-command     # Disconnect WIFI

您不想在代理脚本中使用简单的ssh,因为这将转换为对“运行脚本”的另一个调用。还要注意,提供给原始ssh的所有选项将由初始的“ ssh”会话处理,该会话将利用代理“ nc”隧道。

答案 1 :(得分:1)

对于OpenSSH,您可以在ssh配置(LocalCommand)中指定一个~/.ssh/config

但是要使其正常工作,您还需要系统范围的选项(在/etc/ssh/ssh_config中)PermitLocalCommandyes。 (默认情况下,它设置为no。)

它在身份验证之后但在启动远程外壳程序之前在本地计算机上执行。

不过,在关闭连接后似乎没有(简单)的执行方法。