这是方案
我试图让scp访问server3,但是只有公共ssh访问服务器1.要ssh到server3,我必须ssh到server1,ssh到server2,然后ssh到server3。
我最终的结果是,我可以将WinSCP发送到localhost:8022,它将为我提供对server3的文件访问权。
我正在尝试使用ssh隧道,但是通过我阅读的所有教程和问题似乎都没有适用于这种情况。
我在Windows上使用putty。
任何建议都会有所帮助。谢谢。
答案 0 :(得分:20)
在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
。
aes
/ 3des
没有意义; arcfour
和blowfish
速度更快。-o****
设置的其余部分没有偏执,因此即使Host server1
添加了ssh_config
有奇怪设置的节,也没有任何内容。同样,您可以配置PuTTY以使用代理命令plink -P %proxyport -pw %pass %user@%proxyhost nc %host %port
,并相应地在“连接/代理”配置窗格中设置代理主机名/端口/用户/密码。 plink
和PuTTY套件的其余部分(pscp
,psftp
等)加载以PuTTY图形配置保存的任何内容;希望WinSCP也能做到。 (我不使用它,所以我不太熟悉它的功能。)
答案 1 :(得分:10)
首先想到的解决方案是将一个本地端口连接到每个服务器。由于SSH使用端口22,我们将使用每个SSH连接将本地端口隧道连接到下一个服务器的端口22。
当您打开PuTTY时,您会遇到PuTTY Configuration对话框。您需要编辑的两个类别是“会话”和“连接→SSH→隧道”。
打开PuTTY的副本。使用以下设置:
连接到主机
server1
隧道端口
15500
目的地:server2:22
(安全shell端口)
现在,每次连接到本地计算机上的端口15500时,您的连接都将通过隧道连接到服务器2上的端口22.
打开PuTTY的副本。使用以下设置:
localhost
15501
server3:22
(安全shell端口)打开PuTTY的副本。使用以下设置:
localhost
15502
server3:22
(安全shell端口)使用WinSCP连接到端口localhost
上的15502
。您的连接将通过隧道传输,就像您直接连接到server3
一样。
请在评论中告诉我这是否适合您。祝你好运!
答案 2 :(得分:4)
此方法类似于在open 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会话。
答案 3 :(得分:0)
有很好的描述perl脚本解决方案here。也请阅读发布的评论。
在SSH Agent Forwarding上阅读更多内容(在评论后的perl脚本中提及)。
答案 4 :(得分:0)
答案是从server3反向隧道
答案 5 :(得分:0)
如果您只需要超越一台服务器,我发现直接在WinSCP上进行此设置更容易。
场景:计算机 - > server1-> server2
1:设置与server2的连接
2:点击高级 - >连接 - >隧道
3:启用SSH隧道并将主机设置为server1