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 someone@example.com
加入这样的配置后
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 someone@example.com
这是可以起example.com的X程序,界面在本地,如jconsole, jvisualvm,emacs等,倒是方便。
端口映射
例如本地并没有装MySQL服务,有个程序需要访问本地的MySQL服务。可以通过ssh端口转发,把到本地的3306的请求转发给example.com的127.0.0.1:3306。
ssh -L localhost:3306:localhost:3306 -Nf someone@example.com
这样可以绕过防火墙,它不需要example.com对外开放3306端口。
反向端口映射
你的机器在内网,外面访问不了。你回家后还想访问本机的3389端口,继续干活。你有一台外网的机器,上面有sshd,可以通过:
ssh -R :3389:localhost:3389 -Nf someone@example.com
这样你就可以在另外地方通过访问example.com:3389,而达到访问本机3389的目的。
自建简易FQ
ssh -D :3128 someone@example.com
这样就在本地建立了一个SOCKS代理,SOCKS工作在TCP层。浏览器等可以设置代理为SOCKS 127.0.0.1:3128。这样浏览器和example.com之间建立一条加密的安全通道,如果example.com在X外,你就绕过了。
Rssminer有很多抓取任务,有不少在X外,本地开发时,就是通过一个支持SOCKS的HTTP client和ssh -D
完成抓取任务的。
脚本远程命令
ssh可被脚本用于执行远程命令,使admin任务脚本化,自动化。 例如:
ssh someone@example.com uname
相当于登陆到example.com机器上,执行uname
命令,结果输出到控制台,退出
Rssminer 用此来部署代码后,重启服务