我的 中有以下几行.ssh/config
:
Host localhost
ProxyCommand none
Host n0*
ProxyCommand none
Host *
ProxyCommand corkscrew proxy.m.com 80 myserv 443 ~/.ssh/auth
即 forlocalhost
和n0*
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
命令检测是否可用,因为终端不一定连接到标准输入。