1 安装
2 配置ssh服务
3 建立公钥与私钥
4 使用 PuTTY 客户端软件登入
5 ssh服务配置文件详解
ssh服务安装
Linux下广泛地使用OpenSSH程序来实现SSH协议。这个在CentOS 6 环境下,默认地安装了。 [root@localhost ~]# rpm -qa | grep ssh openssh-clients-5.3p1-81.el6.i686 libssh2-1.2.2-11.el6_3.i686 openssh-server-5.3p1-81.el6.i686 openssh-askpass-5.3p1-81.el6.i686 openssh-5.3p1-81.el6.i686 如果,没有安装。可以手动地在Linux安装盘,找到相应的RPM组件,进行安装(服务器组件是必顺的,其它的可以选择性地安装) [root@localhost ~]# yum install openssh* # 安装SSH [root@localhost ~]# service sshd start # 启动SSH [root@localhost ~]# chkconfig sshd on # 设置开机运行 [root@localhost ~]# netstat -tlp # 显示 说明ssh已经启动 0 0 *:ssh *:* LISTEN |
SSH配置文件的修改
首先修改SSH的配置文件。如下: [root@localhost ~]# vi /etc/ssh/sshd_config # 用vi打开SSH的配置文件 Protocol 2 # 修改后变为此状态,仅使用SSH2 ServerKeyBits 1024 # 修改后变为此状态,将ServerKey强度改为1024比特 PermitRootLogin no # 修改后变为此状态,不允许用root进行登录 PasswordAuthentication no # 修改后变为此状态,不允许密码方式的登录 PermitEmptyPasswords no # 修改后变为此状态,禁止空密码进行登录 然后保存并退出。 因为我们只想让SSH服务为管理系统提供方便,所以在不通过外网远程管理系统的情况下,只允许内网客户端通过SSH登录到服务器,以最大限度减少不安全因素。设置方法如下: [root @ localhost ~]# vi /etc/hosts.deny # 修改屏蔽规则,在文尾添加相应行 # # hosts.deny This file describes the names of the hosts which are # *not* allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # # The portmap line is redundant, but it is left to remind you that # the new secure portmap uses hosts.deny and hosts.allow. In particular # you should know that NFS uses portmap! sshd: ALL # 添加这一行,屏蔽来自所有的SSH连接请求 [root @ localhost ~]# vi /etc/hosts.allow # 修改允许规则,在文尾添加相应行 # # hosts.allow This file describes the names of the hosts which are # allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # sshd: 192.168.0. # 添加这一行,只允许来自内网的SSH连接请求 重新启动SSH服务 在修改完SSH的配置文件后,需要重新启动SSH服务才能使新的设置生效。 [root @ localhost ~]# /etc/rc.d/init.d/sshd restart # 重新启动SSH服务器 Stopping sshd: [ OK ] Starting sshd: [ OK ] ← SSH服务器重新启动成功 |
这时,在远程终端(自用PC等等)上,用SSH客户端软件以正常的密码的方式是无法登录服务器的。为了在客户能够登录到服务器,我们接下来建立SSH用的公钥与私钥,以用于客户端以“钥匙”的方式登录SSH服务器。
SSH2的公钥与私钥的建立
登录为一个一般用户,基于这个用户建立公钥与私钥。(这里以 centosaline 用户为例) [root @ localhost ~]# su - centosaline # 登录为一般用户 centosaline [ centosaline @localhost ~]$ ssh-keygen -t rsa # 建立公钥与私钥 Generating public/private rsa key pair. Enter file in which to save the key (/home/kaz/.ssh/id_rsa): ← 钥匙的文件名,这里保持默认直接回车 Created directory '/home/kaz/.ssh' Enter passphrase (empty for no passphrase): ← 输入口令 Enter same passphrase again: ← 再次输入口令 Your identification has been saved in /home/kaz/.ssh/id_rsa. Your public key has been saved in /home/kaz/.ssh/id_rsa.pub. The key fingerprint is: tf:rs:e3:7s:28:59:5s:93:fe:33:84:01:cj:65:3b:8e centosaline @localhost . centosaline .com 然后确认一下公钥与密钥的建立,以及对应于客户端的一些处理。 [ centosaline @localhost ~]$ cd ~/.ssh # 进入用户SSH配置文件的目录 [ centosaline @localhost .ssh]$ ls -l #列出文件 total 16 -rw------- 1 centosaline centosaline 951 Sep 4 11:22 id_rsa # 确认私钥已被建立 -rw-r--r-- 1 centosaline centosaline 241 Sep 4 11:22 id_rsa.pub # 确认公钥已被建立 [ centosaline @localhost .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 公钥内容输出到相应文件中 [ centosaline @localhost .ssh]$ rm -f ~/.ssh/id_rsa.pub # 删除原来的公钥文件 [ centosaline @localhost .ssh]$ chmod 400 ~/.ssh/authorized_keys # 将新建立的公钥文件属性设置为400 然后,将私钥通过安全的方式转移到欲通过SSH连接到服务器的PC上。 [centosaline @localhost .ssh]$ exit # 退出一般用户的登录(返回root的登录) [root@ localhost ~]# mount /mnt/ssh1/ # 加载软盘驱动器 [root@ localhost ~]# mv /home/ centosaline /.ssh/id_rsa /mnt/ssh1 / # 将刚刚建立的私钥移动到软盘 [root@ localhost ~]# umount /mnt/ssh1/ # 卸载挂载 这样,我们通过对应于 centosaline 用户的私钥,就可以在远程终端上通过SSH客户端连接到服务器了。但服务器生成的私钥匙不能被客户端直接应用…详细请见下一节。 [root@ localhost ~]# /etc/init.d/ssh restart #以上所有修改重启ssh: |
使用 PuTTY登入
当服务器的SSH服务正常运行后,我们完全可以从此在我们的自用PC上用SSH客户端软件在局域网中登录到服务器,用这种方式完成服务器以后的配置和维护。不严格的说,这时服务器是不需要显示器和键盘的,因为绝大多数的配置工作都可在远端(局域网内)的客户端上操控。
这里,以简单易用的SSH客户端软件之一 -- PuTTY 为例,介绍从自用PC上登录到服务器的方法。
转换来自服务器端的私钥为PuTTY可用的私钥
在 用OpenSSH构建SSH服务器 一节中,我们将服务器端相应用户的的私钥用安全的方式--3.5寸磁盘为介质,移动到了远程终端(自用PC等等)上,下面就介绍一下载远程终端用SSH客户端软件登录到服务器的方法。
SSH客户端软件,我们准备是用简单易用的PuTTY。但服务器端直接生成的私钥,PuTTY无法直接使用,需要用PuTTYGen来转换为PuTTY可以使用的私钥匙。
[1] 下在私钥转换工具 PuTTYGen 。 并且将要转换的私钥从软盘上复制到远程终端本地硬盘的适当位置上。
[2] 运行 PuTTYGen ,出现如下窗口:
[3] 点击Load,选取服务器端生成的私钥(文件类型要选择“All Files”)。如下
[4] 开始转换私钥,这里需要输入在服务器端建立此私钥时的口令。在文本框中输入口令开始转换,如下:
[5 ] 保存转换后的私钥匙到适当的位置(转换后的私钥将做为PuTTY登录到服务器时使用的私钥)。点击“Save private key”,并选择适当的位置保存私钥。如下:
最后,关闭PuTTYGen,下面我们开始用PuTTY远程登录服务器。
在Windows下用PuTTY通过SSH协议登录到服务器
[1] 下载 PuTTY ,放在适当的目录(文件夹)中。(PuTTY为一个可执行文件,双击即运行)
[2] 双击启动 PuTTY ,在左侧找到Auth(认证方式)一项,对连接是使用的私钥进行设定,如下:
[3] 点击Browse,选择刚刚用PuTTYGen转换后的私钥。如下:
然后点击左侧的Session,回到主机连接信息的设置,如下:
[4] 配置主机名,在“Host Name”填入服务器的IP地址,以及在“Saved Sessions”栏上填入此连接的名称(任意),然后点击Save,保存主机连接设置。如下:
[5 ] 然后在登录窗口中输入服务器端,相应用户的用户名,如下:
[6 ] 在输入完用户名后,不会出现用户密码输入提示框,因为在SSH服务器配置中我们禁止了用户通过用户密码方式的SSH登录。这时候会出现要求输入口令的提 示,这个口令就是在服务器端建立相应用户(centosaline)的私钥的时候设置的口令。输入口令,进行登录。如下:
以上,就通过“钥匙”的方式成功的登录到了服务器。
另外由于在SSH服务器设定时禁止了root直接从远程登录,所以用SSH客户端是无法用通过root登录的,再者,要允许某个用户对服务器进行登 录,必须基于某个用户建立其相应的公钥与私钥--因为我们禁止用户通过用户密码的认证方式来登录SSH服务器,这样就大大增强了服务器的安全性。
但作为管理员,您可以将一般用户加入到wheel组中(方法见 CentOS的下载、安装及初始环境设置 ),然后基于此一般用户建立相应私钥于公钥,通过此用户远程登录到,然后再通过“su -”命令,获得root权限,对系统进行配置。而且,在初始环境设置中,我们不允许wheel组外用户“su -”登录为root用户,从而又进一步增强了系统的安全性。
从此,我们就可以通过在Windows下用PuTTY登录到服务器的方式来完成所有服务器的配置工作。当然如果您喜欢,或出于其他原因,也同样可以在 服务器本机上完成所有的配置工作。二者无本质的区别,这也体现了UNIX操作系统多用户、多任务处理的特性之一。
下篇期待 linux下mysql安装与配置。
ssh服务配置文件详解
Port 22
“Port”设置sshd监听的端口号。
ListenAddress 192.168.1.1
“ListenAddress”设置sshd服务器绑定的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”设置包含计算机私人密匙的文件。
ServerKeyBits 1024
“ServerKeyBits”定义服务器密匙的位数。
LoginGraceTime 600
“LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。
PermitRootLogin no
“PermitRootLogin”设置root能不能用ssh登录。这个选项一定不要设成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”
StrictModes yes
“StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。
X11Forwarding no
“X11Forwarding”设置是否允许X11转发。
PrintMotd yes
“PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。
SyslogFacility AUTH
“SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。
LogLevel INFO
“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。
RhostsAuthentication no
“RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。
RhostsRSAAuthentication no
“RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否允许只有RSA安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否允许口令验证。
PermitEmptyPasswords no
“PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。
AllowUsers admin
“AllowUsers”的后面可以跟着任意的数量的用户名的匹配串(patterns)或user@host这样的匹配串,这些字符串用空格隔开。主机名可以是DNS名或IP地址。