bash 别名/函数中的 SSH 两次

bash 别名/函数中的 SSH 两次

在工作中,我们运行门户服务器来访问所有“真实”服务器。本质上,任何需要通过 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>

相关内容