如何通过SSH隧道复用认证实现向同一远程机器的SCP传输(避免重复获取OISPP令牌)
如何通过SSH隧道复用认证实现向同一远程机器的SCP传输(避免重复获取OISPP令牌)
我太懂你这种痛苦了——每次用SCP都得重新申请OISPP令牌,不仅步骤繁琐还容易输错,连自动化工具都没法用。你想靠SSH隧道复用认证的思路完全没问题,只是可能端口转发的配置没到位。下面我给你一步步拆解正确的操作方法:
一、先建立持久化的SSH端口转发隧道
你需要先通过OISPP令牌建立一个后台运行的SSH连接,同时把本地的某个端口(比如选9999,只要本地没被占用就行)映射到中转机上的localhost:22——也就是你平时第二次SSH登录的目标机器端口。
执行这个命令:
ssh -L 9999:localhost:22 -N -f "vaultaddress=someip@token=blabla@pam-xxx@blabla@remote_ip@someip3"
给你解释下每个参数的作用:
-L 9999:localhost:22:把本地的9999端口,通过当前SSH连接转发到中转机的localhost:22端口(也就是你最终要操作的目标机器)-N:告诉SSH不要执行远程命令,只做端口转发,避免进入中转机的shell-f:让SSH连接在后台运行,这样你还能继续用当前终端做其他操作
执行完这个命令后,你的本地9999端口就和目标机器的22端口打通了,而且这个连接会保持住(只要你不主动关闭或者网络断了)。
二、用本地端口直接做SCP传输
现在你就可以直接通过本地的9999端口,用useful-user身份做SCP传输了,完全不用再重新申请令牌:
从本地传文件到远程目标机器
scp -P 9999 /本地文件路径/your-file.txt useful-user@localhost:/远程目标路径/
从远程目标机器拉文件到本地
scp -P 9999 useful-user@localhost:/远程文件路径/remote-file.txt /本地保存路径/
注意这里SCP要用-P参数指定端口(大写P,和SSH的小写p不一样,别搞混了)。
三、进阶:用SSH配置文件简化操作
如果经常需要这么操作,你可以把隧道配置写到SSH的配置文件里,下次启动隧道只要敲个简单的命令就行:
- 打开(如果没有就创建)
~/.ssh/config文件,添加以下内容:
Host oispp-target-tunnel HostName vaultaddress=someip@token=blabla@pam-xxx@blabla@remote_ip@someip3 LocalForward 9999 localhost:22 NoCommand true # 只做端口转发,不执行远程命令 ControlMaster auto ControlPath ~/.ssh/ctrl-%h-%p-%r ControlPersist 1h # 让连接在后台保持1小时,超时自动关闭
- 保存文件后,启动隧道只需要执行:
ssh oispp-target-tunnel
之后的SCP操作还是和之前一样用-P 9999就行,而且这个隧道会自动保持1小时,期间不用重新申请令牌。
四、注意事项
- 端口冲突:如果本地9999端口被占用了,换个其他没被用的端口(比如9998、10000都可以),命令里的端口号统一改就行
- 关闭隧道:如果要手动关闭后台的SSH隧道,可以用
ps aux | grep ssh找到对应的进程,然后用kill 进程号关闭;或者用ssh -O exit oispp-target-tunnel(如果用了配置文件的话) - 令牌过期:这个方法只是复用当前令牌的认证会话,如果令牌本身过期了,还是得重新申请新的令牌再建隧道
备注:内容来源于stack exchange,提问作者ABu
相关产品推荐
相关产品推荐

