SSH使用技巧
SSH免输入密码
SSH始终保持连接
原理是依赖ControlMaster的能力,保持socket文件存在。
首先创建配置文件,可使用 ~/.ssh/config 或者/etc/ssh/ssh_config
这里我使用~/.ssh/config 内容如下:
Host 61.74.58.123 61.74.58.122
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
简单解释下,我要针对的是上述2个IP的主机,其他不需要。然后用到ControlMaster auto,否则默认是no的状态。%r 代替用户名,%h代替主机,%p代表端口。这个是表示生成的socket文件
然后命令:
ssh -M -N -f 61.74.58.123
-M 表示使用ControlMaster 模式,这里似乎可有可无,都会去用的
-N 表示不执行远程的命令
-f 后台执行命令
-N与-f配合,表示告诉ssh 我不需要执行命令,给我直接在后台工作。这样就使一条连接保持着了。
最后,直接再使用ssh 61.74.58.123连接,而且速度很快,不需要再输入密码。不过目前还有个问题,有些服务器,会在一段时间不操作后自动断开连接,这样那个socket就没用了。可能可以用后台定期执行一些命令等解决。同样用-f参数。具体尚未试验。
如果要关闭服务器,只需要输入
ssh -O exit 61.74.58.123
通过SSH Forward 建立安全连接
表示连接到server上并将server的80和本地的12345建立条tunnel,然后访问本地的12345端口即可,此操作会连接至远端主机,不是后台操作
ssh serverip -L 12345:localhost:80
links http://localhost:12345/
后台操作
ssh serverip -f -L 12345:localhost:80 sleep 10
或
ssh serverip -Nf -L 12345:localhost:80
-L 表示本地端口重定向到远端端口,12345表示绑定的本地端口,localhost表示远端主机上的ip地址,即远端主机上的loopback,80表示远端要被定向到的端口
-f 后台
-N 不执行命令(不加就必须执行条远端命令)
通过SSH 跨内网
方法是使用与-L对应的-R参数,表示将远端的端口映射到本地
ssh serverip -R 12345:localhost:80
表示当访问serverip的12345端口时,等于访问本机的80
12345指远端要绑定的端口,localhost表示本地主机的ip地址,80表示要重定向到的本地主机的端口
实际应用:
假设A内网机器,B公网机器,有公网IP,B要访问A的ftp
A:ssh B -R 12345:localhost:21
B:ftp localhost 12345
如果存在C,也要访问A的ftp,那么B要做的是修改sshd_config:
GatewayPorts yes
因为默认端口重定向,监听的ip是loopback的
SSH代理
使用ssh serverip -D 1080
putty配置方法:
在connection->ssh->tunnels,输入source port(这个是你本地监听的端口),然后destination下选择dynamic。然后连接到proxy 服务器,输入用户名密码登录,就不用管他了。
之后设置本地的socks代理即可,端口为1080,注,监听在loopback,默认。浏览器的话就在代理设置里加上127.0.0.1 1080的代理。