避免被 ssh ProxyCommand 捕获

避免被 ssh ProxyCommand 捕获

我的 中有以下几行.ssh/config

Host localhost
ProxyCommand none
Host n0*
ProxyCommand none

Host *
ProxyCommand corkscrew proxy.m.com 80 myserv 443 ~/.ssh/auth

即 forlocalhostn0*ssh 不会使用代理,但对于其他主机则会使用代理。

我被困了好几次,知道什么时候我想连接到其他人本地机器,但无法连接,因为代理处于活动状态。他们也不例外~/.ssh/config

使用代理时,是否可以将信息回显到命令行?例如

$ ssh otherpc
  ---> using  ProxyCommand corkscrew proxy.m.com 80 myserv 443 ~/.ssh/auth
Password: 

我知道ssh -v列出了这一行(以及许多其他行):

debug1: Executing proxy command: exec corkscrew proxy.m.com 80 myserv 443 ~/.ssh/auth                                                                                                                                        

是否有更简洁的方式来显示所使用的代理命令,帮助我避免陷入困境?也许是一个聪明的 bash 别名/函数 grep ssh -v

警告:不要写ssh() { ssh -v | grep Proxy}。我也尝试过...并且不小心叉子轰炸我:P

答案1

我建议您编写一个小包装,corkscrew-wrapper其中包含以下内容:

#!/bin/sh
echo "Executing proxy command corkscrew ..." > /dev/tty
exec corkscrew "$@"

并在 ProxyCommand 行中使用corkscrew-wrapper而不是。corkscrew

如果你想支持由at或 cron 执行,以下应该可以工作:

#!/bin/sh

cmd() { echo "Executing proxy command corkscrew ..."; }

{ cmd > /dev/tty; } 2> /dev/null
[ $? -eq 0 ] || cmd >&2

exec corkscrew "$@"

注意:不要/dev/tty用该tty命令检测是否可用,因为终端不一定连接到标准输入。

相关内容