这是场景
我试图让scp访问server3,但是只有公共ssh访问服务器1.要ssh到server3,我必须ssh到server1,ssh到server2,然后ssh到server3.
我希望最终的结果是我可以将WinSCP发送到localhost:8022并且它将为我提供对server3的文件访问权限.
我正在尝试使用ssh隧道,但通过我读过的所有教程和问题似乎都没有适用于这种情况.
我在Windows上使用putty.
任何建议都会有所帮助.谢谢.
在OpenSSH中,我在需要隧道时使用此设置.这允许我直接键入sftp server3
而不必担心首先手动启动server2
和server1
隧道.
# ~/.ssh/config # to connect to server2, tunnel through server1 Host server2 ProxyCommand ssh server1 nc %h %p # to connect to server3, tunnel through server2 Host server3 ProxyCommand ssh server2 nc %h %p
为了更完整,我通常ssh -oCiphers=arcfour128,arcfour256,arcfour,blowfish-cbc -oControlMaster=no -oForwardX11=no -oForwardAgent=no -oPermitLocalCommand=no -oClearAllForwardings=yes server1 nc %h %p
用作ProxyCommand
.
隧道连接的ssh连接已经加密,因此使用较重的aes
/ 3des
外层是没有意义的; arcfour
并且blowfish
更快.
其余的-o****
设置都没有偏执,所以即使Host server1
添加了真正奇怪设置的节也没有什么破坏ssh_config
.
同样,您可以配置PuTTY以使用proxy命令plink -P %proxyport -pw %pass %user@%proxyhost nc %host %port
,并相应地在Connection/Proxy配置窗格中设置代理主机名/端口/用户/密码. plink
并且PuTTY套件的其余部分(pscp
,psftp
等)加载以PuTTY图形配置保存的任何内容; 希望WinSCP也能做到.(我不使用它,所以我不太熟悉它的功能.)
想到的第一个解决方案是将一个本地端口连接到每个服务器.由于SSH使用端口22,我们将使用每个SSH连接将本地端口隧道连接到下一个服务器的端口22.
当您打开PuTTY时,您会遇到PuTTY Configuration对话框.您需要编辑的两个类别是"会话"和"连接→SSH→隧道".
打开PuTTY的副本.使用这些设置:
连接到主机
主机名: server1
港口:22
隧道一个港口
本地模式
源端口: 15500
目的地:( server2:22
安全shell端口)
现在,每次连接到本地计算机上的端口15500时,您的连接都将通过隧道连接到server2上的端口22.
打开PuTTY的副本.使用这些设置:
连接到主机
主机名: localhost
港口:15500
隧道一个港口
本地模式
源端口: 15501
目的地:( server3:22
安全shell端口)
打开PuTTY的副本.使用这些设置:
连接到主机
主机名: localhost
港口:15501
隧道一个港口
本地模式
源端口: 15502
目的地:( server3:22
安全shell端口)
使用WinSCP连接到localhost
端口15502
.您的连接将通过隧道传输,就像您server3
直接连接一样.
请在评论中告诉我这是否适合您.祝好运!
此方法类似于在打开的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
// proxy命令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会话。