问题描述:
现在有三台机器:
star:中科院内网服务器,无法直接从外网访问,IP:172.16.0.*
jump:中科院跳板服务器,可以从内外网访问,但是只有端口22,IP:159.226.113.*
mine:家里的电脑,或PC或Mac,IP:不重要!ok?不重要!
那么,想从家里向服务器传数据,或者下数据怎么破?尤其不想手动做搬运工怎么破?
Mac & Linux
SSH访问
mine -> jump -> star
这样是带图形界面的,可以xeyes
进行测试:
ssh -t -o ProxyCommand='ssh -Y dam@159.226.113.* -W 172.16.0.*:22' -Y zy@172.16.0.*
当然,通常我会在~/.bashrc
建立一个alias,省的每次敲着一大串:
alias sjumpstar="ssh -t -o ProxyCommand='ssh -Y dam@159.226.113.* -W 172.16.0.*:22' -Y zy@172.16.0.*"
其中-t
是指远程建立一个tty,-o ProxyCommand
是设置设定远程代理执行命令的option,-Y
是指建立信任的X11传输协议。
scp rsync传输文件
mine -> jump -> star
scp进行传输,少量传输还挺好,大量数据的备份不推荐:
scp -r -o ProxyCommand='ssh dam@159.226.113.* -W 172.16.0.*:22' zy@172.16.0.*:~/data ./data
其中-r
指recursively递归复制,复制单独文件时可以拿掉。
rsync传输,老司机的同步命令,适合大量数据的备份,支持断点续传:
rsync -avPH -e "ssh -t -o ProxyCommand='ssh dam@159.226.113.* -W 172.16.0.*:22'" zy@172.16.0.*:~/data ./data
star -> jump -> mine
也很简单,反过来写:
scp -r -o ProxyCommand='ssh dam@159.226.113.* -W 172.16.0.*:22' ./data zy@172.16.0.*:~/data
rsync -avPH -e "ssh -t -o ProxyCommand='ssh dam@159.226.113.* -W 172.16.0.*:22'" ./data zy@172.16.0.*:~/data
当然,也有很多其他方法,比如笨笨的zssh
;以及操作复杂的ssh映射本地socks再通过Proxifier配置代理。
sshfs 挂载本地
最爽的难道不是将ssh映射到本地当成一块磁盘用吗?探索半天,一条命令足以:
sshfs zy@172.16.0.*:/ /mnt -o ssh_command='ssh -J dam@159.226.113.*'
随便拖拽copy开不开心?卸载的话右键弹出即可。
映射到本地
最简单的思路是这样的:先通过jump把star的22端口映射到本地12333(随便选,别被占用就行),再假装ssh、scp、rsync到本地的12333端口。只不过这样会留下一个ssh的后台,这个后台可以选择使用-f
参数自动放在后台,用kill、htop等工具管理,也可以用screen不加-f
,不用的时候手动终止。
映射端口:
ssh -N -f -L localhost:12333:172.16.0.*:22 dam@159.226.113.*
使用端口:
ssh zy@localhost -p 12333
scp -r -p 12333 zy@localhost:~/data ./data
一劳永逸的.ssh_config修改
上面说的那么多都需要手动设置一堆option或者有很多前置操作,但是如果学会了修改.ssh_config
配置文件,一切都如丝般顺滑,完全体会不到自己在外网。当然,我还没学会,到家再做折腾。
frp 全能穿透
如果你在jump有较大权限,或者其防火墙没有ban掉你开端口的权力,恭喜你,你可以拥有一套豪华的frp穿透套餐。包括,自己建站、自建私有云,client端也随你说:iOS、安卓、Unix-like、windows都无缝访问。
Windows
一直认为Mobaxterm比Xshell好用很多,这里可以再次推荐下。首先,它是免费的(至少免费版够用);其次,内置cygwin为底层更加方便,所以以上命令直接写在Moba的local terminal里面就可以直接用,而且左边的简易文件管理器基本做到无缝衔接。最重要的,UI漂亮,可定制!
如果想保存这种设定以便经常访问,也很简单,新建ssh对话的时候有gateway的选项,把跳板服务器的信息填进去就可以了。
[图片上传失败...(image-efd28b-1550468828018)]