19 Nov 2012

SSH/SSHD的常用配置和用法

ssh是一个常用的命令,GNU/Linux 和 OS X默认安装。sshd亦是服务器居家必备。

sshd配置:/etc/ssh/sshd_config 禁止密码登陆,禁止root登陆

这是一个血的教训,最近身边的一台服务器被攻击,原因是允许了root用密码登陆,结果被别人暴力破解。

# edit file: /etc/ssh/sshd_config
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
PermitRootLogin no

ssh 配置: ~/.ssh/config

可以把一些常访问的ssh服务器的信息放在 ~/.ssh/config

例如经常敲这样的命令:以someone用户登陆example.com,它的端口是2323,并且启用压缩

ssh -p 2323 -C 

加入这样的配置后

Host example
    HostName example.com
    User someone
    Port 2323
    Compression yes

就可以直接 ssh example登陆了,意思和敲完整命令的一样

另外,如果加入

ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
ControlPersist 10h

就相当于keep-alive,Ctrl-D退出后,并没有真正退出,下次再登陆时,会快不少。这个对需要远程执行命令时,比较有用。

X11转发

我在公司,是通过Macbook Air ssh 登陆到一台强大的服务器上进行开发,起远程的Emacs,并且把Emacs的界面放在Air上,使Air成为X Server,这样Emacs做为一个X11程序,而不是做为终端程序,避免键冲突。 SSH 的-X -Y参数就能帮助实现这个

ssh -p 2323 -C -X -Y 

这是可以起example.com的X程序,界面在本地,如jconsole, jvisualvm,emacs等,倒是方便。

端口映射

例如本地并没有装MySQL服务,有个程序需要访问本地的MySQL服务。可以通过ssh端口转发,把到本地的3306的请求转发给example.com的127.0.0.1:3306。

ssh -L localhost:3306:localhost:3306 -Nf 

这样可以绕过防火墙,它不需要example.com对外开放3306端口。

反向端口映射

你的机器在内网,外面访问不了。你回家后还想访问本机的3389端口,继续干活。你有一台外网的机器,上面有sshd,可以通过:

ssh -R :3389:localhost:3389 -Nf 

这样你就可以在另外地方通过访问example.com:3389,而达到访问本机3389的目的。

自建简易翻墙

ssh -D :3128 

这样就在本地建立了一个SOCKS代理,SOCKS工作在TCP层。浏览器等可以设置代理为SOCKS 127.0.0.1:3128。这样浏览器和example.com之间建立一条加密的安全通道,如果example.com在X外,你就绕过了。

Rssminer有很多抓取任务,有不少在X外,本地开发时,就是通过一个支持SOCKS的HTTP clientssh -D 完成抓取任务的。

脚本远程命令

ssh可被脚本用于执行远程命令,使admin任务脚本化,自动化。 例如:

ssh  uname

相当于登陆到example.com机器上,执行uname命令,结果输出到控制台,退出

Rssminer 用此来部署代码后,重启服务

blog comments powered by Disqus