---
layout: post
title: SSH Security Introduction on Linux
category : Linux
tags : [Linux, Security]
---

SSH (Secure Shell)可以说是每一台Unix/Linux主机的必备软件和服务，既可以用于远程主 机登录，也可以直接在远程主机上执行操作。

对于系统管理员来说，SSH就更显重要了。因为这意味着，当要进行服务器维护工作时，你 可以通过SSH在办公区直接管理服务器，而不必跑到机房，或者偏远的IDC。正如本站一样， 建站时即使用Xshell客户端远程登录到刚购买的Linode VPS，进行博客环境的搭建以及主机 基础安全防护工作；而无需翻山越岭跨不远万里地跑到Linode的某个数据中心。

SSH确实为我们开启了一扇方便之门，但使用不慎也会带来一些安全隐患。当你的主机暴露 在互联网上而不加任何防护，那么它很有可能就是某个好事者的下一道小菜。在开启SSH服 务时，我们可以适当更改某些设置，提高SSH服务的安全性，降低被攻击的可能性。

###1. 使用公钥私钥

使用公钥私钥对进行连接，而不需要输入口令，这样可以减少暴力破解的可能性。前提是需 要将私钥保护好。

####客户端

使用`ssh-keygen`命令，产生密钥对，并将公钥上传至服务端。

也可以使用shell客户端自带的Key管理工具来生成，本站即使用Xshell生成2048位的RSA密 钥对，并将公钥id_rsa.pub上传到服务端。

####服务端

在用户anybody下创建`.ssh`文件夹，并拷贝`id_rsa.pub`到`~/.ssh/authorized_keys`

	cd  /home/anybody
	mkdir .ssh
	cat id_rsa.pub >> .ssh/authorized_keys

	chown -R anybody:anybody .ssh

	chmod 700 .ssh
	chmod 600 .ssh/authorized_keys

注：`~/.ssh/authorized_keys`是ssh的默认配置，详情见`/etc/ssh/sshd_config`

###2. 修改默认端口

编号为1024以下的端口都是一些周知端口，SSH默认的端口号为22，更改SSH端口为非常规端 口，可以在一定程度上减少端口扫描的信息量，如改为5555，攻击者不一定能够很快猜测到 这个端口就是SSH服务，具有一定的不确定性。

更改配置 `/etc/ssh/sshd_config`：

	Port 5555

###3. 禁止root直接登录

root用户权限太大，直接使用root登录进行操作，稍有不慎就可能会引发意想不到的问题， 详见[root用户介绍和基础安全防护](http://www.dylanninin.com/blog/2012/10/root-info-and-basic-security.html)。 在SSH中禁用root登录：

	PermitRootLogin no

###4. 取消密码认证

前面已经通过ssh-key或SSH客户端工具生成了密钥对，就已经可以使用密钥进行登录认证了； 如果还留有密码认证，这显然会是好事者喜欢的盲点。在SSH中取消密码认证：

	PasswordAuthentication no

###5. 登录提醒

在用户成功登录后，sshd会进行一些的动作，其中可能会执行~/.ssh/rc和/etc/ssh/sshrc 脚本。利用这个特性，可以制定sshrc脚本，当有用户SSH远程登录时，发送邮件提醒，利于 尽早发现异常。

	echo "http://whatismyipaddress.com/ip/${SSH_CLIENT%% *}" | mail -s "$USER login from ${SSH_CLIENT%% *}" dylanninin@139.com

以上是本站使用SSH的一些基础安全防护策略。SSH的设计和功能很好很强大，Xshell也是一 款十分值得推荐的客户端，更多信息，可以参考延伸阅读。

##延伸阅读

* [SSH安全性和配置入门](http://www.ibm.com/developerworks/cn/aix/library/au-sshsecurity/index.html)
* [SSH原理与运用(一)](http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html)
* [SSH原理与运用(二)](http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html)
* [与你潇洒人生路：SSH配置](http://www.cnblogs.com/shuaixf/archive/2012/05/25/2517947.html)
* [A挨个搞： Xshell十大技巧](http://actgod.com/archives/86/)
