以下是场景
我正在尝试让scp访问server3,但只有公共ssh可以访问服务器1。要使用ssh访问server3,我必须先使用ssh访问server1,然后使用ssh访问server2,然后使用ssh访问server3。
我希望最终的结果是我可以通过WinSCP连接到localhost:8022,这样我就可以访问server3的文件了。
我正在尝试使用ssh隧道,但在我读过的所有教程和问题中,似乎没有一个适用于这种情况。
我在Windows上使用putty。
任何建议都是非常有帮助的。谢谢。
发布于 2009-06-18 06:35:36
想到的第一个解决方案是通过隧道将一个本地端口连接到每个服务器。由于SSH使用端口22,因此我们将使用每个SSH连接将一个本地端口作为隧道连接到下一个服务器的端口22。
当您打开PuTTY时,您将看到PuTTY配置对话框。您需要编辑的两个类别是"Session“和"Connection→SSH→Tunnels”。
- Connect to host - Host name: `server1`
- Port: 22
- Tunnel a port - Local mode
- Source port: `15500`
- Destination: `server2:22` (the secure shell port)

现在,每次您连接到本地计算机上的端口15500时,您的连接都会被隧道传输到server2上的端口22。
- Connect to host
- Host name: `localhost`
- Port: 15500
- Tunnel a port
- Local mode
- Source port: `15501`
- Destination: `server3:22` (the secure shell port)
- Connect to host
- Host name: `localhost`
- Port: 15501
- Tunnel a port
- Local mode
- Source port: `15502`
- Destination: `server3:22` (the secure shell port)
15502上连接到localhost。您的连接将像直接连接到server3一样进行隧道传输。请在评论中让我知道这是否适用于您。祝好运!
发布于 2012-02-10 07:00:15
此方法类似于在打开的ssh配置文件中使用proxycommand的方法。
此方法的前提条件是,Pageant必须与所有中间(代理)主机的公钥身份验证一起使用,否则您将最终得到一个闪烁的游标,而不是其他任何内容。要了解有关Pageant、PuTTYgen和公钥的更多信息,请参阅:
http://the.earth.li/~sgtatham/putty/0.62/htmldoc/Chapter8.html#pubkey
http://the.earth.li/~sgtatham/putty/0.62/htmldoc/Chapter9.html#pageant
我们有四台机器可以按此顺序访问
PuttyPC -> server01 -> server02 -> server03
对于server01,我们有一个Putty保存的会话,如下所示:
主窗口:user1@server01 //端口22 // SSH
将此会话另存为server01
对于server02,我们有一个Putty保存的会话,如下所示:
主窗口:user2@server02 //端口22 // SSH
代理配置窗口:键入local //代理命令plink -load server01 -nc %host:%port
将此会话另存为server02
对于server03,我们有一个Putty保存的会话,如下所示:
主窗口:user3@pc3 //端口22 // SSH
代理配置面板:键入local //代理命令plink -load server02 -nc %host:%port
将此会话另存为server03
这意味着server03的保存会话将调用server02的保存会话,而server02保存的会话将调用server01会话。
发布于 2009-06-18 04:54:42
有一个描述得很好的perl script解决方案here。一定要阅读帖子上的评论。
请阅读有关SSH Agent Forwarding的更多信息(请参阅perl脚本帖子注释)。
https://stackoverflow.com/questions/1010808
复制相似问题