SSH使用技巧

 

SSH免输入密码

原理是依赖证书去认证,从而免除密码输入。
通过ssh-keygen生成一对公私钥,是否使用passphrase可以根据个人喜好。(其实使用证书就是为了方便而已,我是不喜欢其他密码了。) 然后scp家目录下的.ssh/id_rsa.pub(或者dsa等公钥文件)到目的机器上。
命令过程:
本地
ssh-keygen
scp ~/.ssh/id_rsa.pub B:
 
ssh到B主机(这里第一次必须要输入密码)
(mkdir .ssh如果家目录下不存在该目录)
mv id_rsa.pub .ssh/authorized_keys
或者:cat id_rsa.pub >> .ssh/authorized_keys
 
之后本地就可以直接登录到B了,而不需要密码。不过也有例外情况,至少我就碰到个奇怪的状况,怎么也登不过去。当然策略等我都检查过了。
 

SSH始终保持连接

原理是依赖ControlMaster的能力,保持socket文件存在。
首先创建配置文件,可使用  ~/.ssh/config 或者/etc/ssh/ssh_config
这里我使用~/.ssh/config 内容如下:
 

Code

 

简单解释下,我要针对的是上述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的代理。

posted on 2008-10-28 16:41  YuYii  阅读(3219)  评论(0编辑  收藏  举报