这是情况
我试图让scp访问server3,但只有公共ssh访问服务器1.要ssh到server3,我必须ssh到server1,ssh到server2,然后ssh到server3。
我希望最终的结果是我可以WinSCP到本地主机:8022,它会给我文件访问到server3。
我正在尝试使用SSH隧道,但通过所有的教程和问题,我已经阅读没有似乎适用于这种情况。
我在Windows上使用腻子。
任何build议将是真正有用的。 谢谢。
在OpenSSH中,当我需要隧道时,我使用这个设置。 这使我可以直接键入sftp server3
而不必担心手动启动server2
和server1
隧道。
#〜/ .ssh / config #连接到server2,通过server1隧道 主机server2 ProxyCommand ssh server1 nc%h%p #连接到server3,通过server2隧道 主机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
,并相应地在Connection / Proxy配置窗格中设置代理主机名/端口/用户/密码。 plink
和PuTTY套件的其余部分( pscp
, psftp
等)加载保存在PuTTY图形配置中的任何东西; 希望WinSCP也可以。 (我不使用它,所以我不太熟悉它的功能。)
想到的第一个解决方案是将一个本地端口连接到每个服务器。 由于SSH使用端口22,因此我们将使用每个SSH连接将本地端口连接到下一个服务器的端口22。
当您打开PuTTY时,会遇到PuTTY Configuration对话框。 您需要编辑的两个类别是“会话”和“连接→SSH→隧道”。
打开PuTTY的副本。 使用这些设置:
连接到主机
server1
隧道端口
15500
目的地: server2:22
(安全外壳端口)
现在,每当您连接到本地计算机上的端口15500时,您的连接将被隧道传输到server2上的端口22。
打开PuTTY的副本。 使用这些设置:
localhost
15501
server3:22
(安全外壳端口) 打开PuTTY的副本。 使用这些设置:
localhost
15502
server3:22
(安全外壳端口) 使用WinSCP连接到端口15502
上的localhost
。 您的连接将被隧道化,就像直接连接到server3
。
让我知道这是否适合你。 祝你好运!
这个方法与在open ssh配置文件中使用proxycommand的方式类似。
这个方法的一个先决条件是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,我们有一个保存会话的腻子:
主窗口: user1@server01
//端口22
// SSH
将此会话保存为server01
对于server02,我们有一个保存会话的腻子:
主窗口: user2@server02
//端口22
// SSH
代理配置窗口:键入local
// proxy命令plink -load server01 -nc %host:%port
将此会话保存为server02
对于server03我们有一个腻子保存会话为:
主窗口: user3@pc3
//端口22
// SSH
代理配置面板:键入local
//代理命令plink -load server02 -nc %host:%port
将此会话保存为server03
这意味着保存的server03会话将调用server02保存的会话,server02保存的会话将调用server01会话。
这里有很好的描述perl脚本解决方案。 请阅读发布的评论。
阅读更多关于SSH代理转发 (在Perl脚本发表评论中引用)。
答案是从服务器3反向隧道
如果你只需要超越一台服务器,我发现它更容易做到这一点我直接WinSCP的设置。
场景:computer-> server1-> server2
1:设置连接到server2
2:点击高级 – >连接 – >隧道
3:启用SSH隧道并将主机设置为server1