跨网络建立SSH隧道至目标机器的问题咨询
直接通过SSH隧道连接私有网络目标机器并指定用户名的方法
我平时经常处理这种跨网络的SSH跳转需求,给你两种实用方案,解决你直接连接目标机器的问题,还能明确指定目标机器的用户名:
方案1:用ProxyJump一步到位(推荐,OpenSSH 7.3+支持)
如果你的本地SSH版本是7.3或更高,直接用这个命令就能跳过中转机器的手动登录,一步连到目标机器,还能分别指定中转和目标的用户名:
ssh -J [中转机器用户名]@[中转机器IP] [目标机器用户名]@192.168.1.x
举个实际例子,假设中转机器用户名是proxy_user,IP是你能直接SSH到的公网/内网IP(比如10.x.x.x),目标机器用户名是target_user,IP是192.168.1.10,那命令就是:
ssh -J proxy_user@10.x.x.x target_user@192.168.1.10
要是觉得连接卡顿,可以加两个优化参数:-C启用压缩(适合网络差的情况),-o ServerAliveInterval=60每隔60秒发心跳包保持连接:
ssh -C -o ServerAliveInterval=60 -J proxy_user@10.x.x.x target_user@192.168.1.10
方案2:本地端口转发(兼容旧版本SSH)
如果你的SSH版本比较老,不支持ProxyJump,就用本地端口转发的方式,分两步或者一步完成:
方式A:一次性命令直接连接
ssh -L 2222:192.168.1.x:22 [中转机器用户名]@[中转机器IP] -t ssh [目标机器用户名]@localhost -p 2222
这里的2222是本地随便选的未被占用的端口,命令的意思是:先通过中转机器把本地2222端口映射到目标机器的22端口,然后直接SSH到本地2222端口(也就是目标机器),同时指定目标机器的用户名。
方式B:先后台建立隧道,再单独连接
先在后台建立持久隧道(不会卡住你的终端):
ssh -fN -L 2222:192.168.1.x:22 [中转机器用户名]@[中转机器IP]
参数说明:-f让SSH后台运行,-N表示只建立隧道不执行远程命令。
之后每次要连目标机器,直接用这条命令(指定目标用户名):
ssh [目标机器用户名]@localhost -p 2222
如果要关闭隧道,用ps aux | grep ssh找到对应的进程,kill掉就行。
之前你的命令卡顿,大概率是没正确区分中转和目标的用户名,或者隧道参数没配置对,用上面的方法应该能解决问题。
内容的提问来源于stack exchange,提问作者pelican rouge
相关产品推荐
相关产品推荐

