在工作中,我们运行门户服务器来访问所有“真实”服务器。本质上,任何需要通过 SSH 连接到“真实”(Web)服务器之一的人都会首先通过 SSH 连接到门户,所以它看起来像这样:
mike@localhost# ssh mike@portal
#ssh login notice stuff blah blah
mike@portal# ssh mike@webserver
我正在尝试编写一个 bash 别名或函数来将这两个步骤合二为一。我绝对不是系统管理员,所以在不安装额外软件的情况下尽可能保持简单就很好了。
我已经尝试了以下方法,但它不会像我希望的那样进行:
ssh mike@portal; ssh mike@webserver #terminates on terminal for portal
ssh mike@portal `ssh mike@webserver` #hangs
ssh mike@portal ssh mike@webserver #connects, but gives error "pseudo-terminal will not be allocated because stdin is not a terminal"
有什么想法或解决方法吗?
答案1
ssh mike@portal 执行 ssh mike@webserver
假设您使用密钥连接,如果使用交互式密码,则需要更多标志。
答案2
将以下内容放入您的~/.ssh/config
:
Host webserver
ProxyCommand ssh -A -e none portal nc %h 22
然后就ssh webserver
可以工作了。需要在 上安装 netcat portal
。
答案3
这是一个很常见的需求。
单程 (http://www.eng.cam.ac.uk/help/jpmg/ssh/two-hop-tunnel.html)是使用隧道:
ssh -f -L 51526:server.example.com:22 -1 gateway.example.com sleep 3600
然后
ssh -p 51526 localhost
答案4
在我看来,你正在谈论几个网络服务器。因此,最好的方法可能是将以下内容放入您的$HOME/.ssh/config
Host portal
Hostname portal
User mike
StrickHostKeyChecking yes
LocalForward 1024 webserver1:22
LocalForward 1025 webserver2:22
LocalForward 1026 webserver3:22
...
Host webserver1
Hostname localhost
Port 1024
User mike
Host webserver2
Hostname localhost
Port 1025
User mike
...
然后,您只需实例化您的连接
ssh portal
然后你可以使用连接到任何网络服务器
ssh webserver<n>