场景如下:
我正在尝试获取对server3的scp访问,但只有对server1的公共ssh访问权限。要连接到server3,我必须先ssh到server1,再ssh到server2,然后再ssh到server3。
我的希望是,我可以WinSCP到localhost:8022,并获得对server3的文件访问权限。
我正在尝试使用ssh隧道,但在我阅读的所有教程和问题中,似乎都不适用于此情况。
我在Windows上使用putty。
任何建议都将非常有用。谢谢。
sftp server3
,而无需担心手动启动 server2
和 server1
隧道。
# ~/.ssh/config为了更完整,我通常使用
# 连接到server2,隧道通过server1 Host server2 ProxyCommand ssh server1 nc %h %p # 连接到server3,隧道通过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
中,也不会出现问题。plink -P %proxyport -pw %pass %user@%proxyhost nc %host %port
,并相应地在Connection/Proxy配置面板中设置代理主机名/端口/用户/密码。 plink
和 PuTTY 套件的其余部分(pscp
、psftp
等)加载保存在PuTTY图形配置中的任何内容;希望WinSCP也是这样。(我不使用它,所以对其功能不太熟悉。)第一个想到的解决方案是将每个服务器隧道连接到本地端口。由于SSH使用22号端口,我们可以使用每个SSH连接来将本地端口隧道连接到下一个服务器的22号端口。
打开PuTTY后,会出现PuTTY配置对话框。你需要编辑的两个类别是“Session”和“Connection→SSH→Tunnels”。
打开一份PuTTY的副本,使用以下设置:
连接到主机
server1
隧道连接
15500
目标: server2:22
(安全外壳协议端口)
现在,每次您在本地计算机上连接到15500端口时,您的连接都被隧道连接到server2的22号端口。
打开一份PuTTY的副本,使用以下设置:
localhost
15501
server3:22
(安全外壳协议端口)打开一份PuTTY的副本,使用以下设置:
localhost
15502
server3:22
(安全外壳端口)使用WinSCP连接到localhost
的15502
端口。您的连接将被隧道化,就像直接连接到server3
一样。
请在评论中告诉我这是否对您有效。祝你好运!
这种方法类似于在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的会话。
如果您只需要越过一个服务器,我发现直接在WinSCP中进行设置更容易。
场景:计算机->服务器1->服务器2
1:设置与服务器2的连接
2:单击高级->连接->隧道
3:启用SSH隧道并将主机设置为服务器1
答案是从server3进行反向隧道