在Windows管理Linux服务器时,常使用putty登陆ssh进行远程管理。默认登陆验证方式为密码认证,该方式虽然简单,但每次登陆都要输入一长串的密码,相当麻烦。而且,如果万一把root允许登陆打开,还有可能被强力破解,导致严重的后果。
所以,通常建议用密钥登陆验证代替密码方式,即简单,又可靠。
一、为什么建议使用密钥登陆
通常现在的Linux发行版都使用OpenSSH代替telnet、rsh等明文传输的终端服务。
以红旗 DC Server 5.0为例:
而OpenSSH默认是同时支持密码和密钥两种认证方式的。转一个说明:
为什么要使用公钥认证
通常,通过ssh登录远程服务器时,使用密码认证,分别输入用户名和密码,两者满足一定规则就可以登录。但是密码认证有以下的缺点:
而使用公钥认证则可以解决上述问题。
二、使用putty生成密钥和登陆
根据公钥认证的原理(见后面说明),认证双方任何一方都可制作该钥匙对,并且只要认证方有被认证方的公钥信息,即可匹配成功。
这里,我们先以Windows上的putty登陆Linux服务器为例说明。所以,该密钥对由putty制作。
继续前,请确保您已经把整个putty包都下载完:
官方网站: 点击
最新版本:0.60,我截图的版本是0.55的。
本地下载:
其中包括:PuTTY、Puttygen、PSCP、Plink、Pagent 等工具。
1、使用puttygen制作密钥
启动puttygen工具,为兼容OpenSSH密钥,选择 “SSH2 RSA” :
单击 Generate 按钮,并使用鼠标在“key”框内移动,以获得足够的随机数据供生成密钥使用:
※期间,你会看到进度条上面有个提示 “Please generate some radomness by moving the mouse over the blank area.” ,意思就是让你用鼠标在空白区域随机移动。随着鼠标在空白区域的移动,进度条会一直走下去。停止移动鼠标,进度条也就停止了。所以,那我们要移动鼠标,直到进度条走满为止。
完成后的窗口如下:
其中:
随后,点击“Save private key”保留私钥。
如果没有输入Key passphrase信息,会有警告:
输入私钥的文件名:
※公钥信息可以不用保留在本地的,puttygen可以从私钥得到它,验证时也不会用到。
2、修改openssh配置
修改/etc/ssh/sshd_config:
然后重启sshd服务,原因见: 这里
3、拷贝公钥信息
上面密钥信息窗口的“Key”框最后生成的就是公钥信息:
需要把该信息拷贝到Linux服务器的特定文件中: ~/.ssh/authorized_keys
其中,“~”表示对应用户的主目录,以root为例。
若.ssh目录不存在,请创建它,并把公钥信息写入文件中:
※请务必留意:文件和目录的权限问题,用户必须是将要进行认证的用户,而权限必须是0644,也就是禁止其他人对该文件写入信息。(否则,某些有心人把自己的公钥写入这里,他也可以无密码进来了)
因为,通常umask是0022或0002的,所以请使用chown和chmod修改为对应的权限咯。
4、使用putty使用密钥登陆
对putty进行一些简单配置,即可使用密钥登陆Linux服务器。
选择Connection-SSH-Auth,在“Private key file for authentication”输入密钥的路径:
然后在Connection的“Auth-login username”输入登陆的用户名,例如root:
◎Putty 0.60 版本在Connection-Data页内。
然后点击Open即可:
若一切正常,则可以在session中Save保存配置。
三、使用OpenSSH生成密钥
密钥既可使用putty生成,也可用OpenSSH生成。
1、Linux下生成密钥
运行:
2、把公钥信息写入authorized_keys文件中
运行:
3、生成putty的私钥
由于SSH的标准中,并没有固定密钥文件的格式。而Putty使用的私钥格式和OpenSSH生成的有点不同,需要转换一下。
a)把id_rsa传到Windows机器上
b)使用puttygen的“Load”读取id_rsa文件
这里也可以从图中的公钥信息,与id_rsa.pub对比一下,应该是一致的。
c)点击“Save private key”保留私钥。
d)putty使用该新的私钥登陆服务器即可。
所以,通常建议用密钥登陆验证代替密码方式,即简单,又可靠。
一、为什么建议使用密钥登陆
通常现在的Linux发行版都使用OpenSSH代替telnet、rsh等明文传输的终端服务。
以红旗 DC Server 5.0为例:
引用
# rpm -qa|grep -E -w 'openssh'
openssh-clients-4.0p1-1.2AX
openssh-server-4.0p1-1.2AX
openssh-4.0p1-1.2AX
openssh-clients-4.0p1-1.2AX
openssh-server-4.0p1-1.2AX
openssh-4.0p1-1.2AX
而OpenSSH默认是同时支持密码和密钥两种认证方式的。转一个说明:
为什么要使用公钥认证
通常,通过ssh登录远程服务器时,使用密码认证,分别输入用户名和密码,两者满足一定规则就可以登录。但是密码认证有以下的缺点:
引用
a)用户无法设置空密码(即使系统允许空密码,也会十分危险)
b)密码容易被人偷窥或猜到
c)服务器上的一个帐户若要给多人使用,则必须让所有使用者都知道密码,导致密码容易泄露,而且修改密码时必须通知所有人
b)密码容易被人偷窥或猜到
c)服务器上的一个帐户若要给多人使用,则必须让所有使用者都知道密码,导致密码容易泄露,而且修改密码时必须通知所有人
而使用公钥认证则可以解决上述问题。
引用
a)公钥认证允许使用空密码,省去每次登录都需要输入密码的麻烦
b)多个使用者可以通过各自的密钥登录到系统上的同一个用户
c)即使修改了对应用户的密码,也不会影响登陆
d)若同时禁用密码认证,则只要保证私钥的安全,不会受到暴力破解的威胁
b)多个使用者可以通过各自的密钥登录到系统上的同一个用户
c)即使修改了对应用户的密码,也不会影响登陆
d)若同时禁用密码认证,则只要保证私钥的安全,不会受到暴力破解的威胁
二、使用putty生成密钥和登陆
根据公钥认证的原理(见后面说明),认证双方任何一方都可制作该钥匙对,并且只要认证方有被认证方的公钥信息,即可匹配成功。
这里,我们先以Windows上的putty登陆Linux服务器为例说明。所以,该密钥对由putty制作。
继续前,请确保您已经把整个putty包都下载完:
官方网站: 点击
最新版本:0.60,我截图的版本是0.55的。
本地下载:
下载文件
其中包括:PuTTY、Puttygen、PSCP、Plink、Pagent 等工具。
1、使用puttygen制作密钥
启动puttygen工具,为兼容OpenSSH密钥,选择 “SSH2 RSA” :
单击 Generate 按钮,并使用鼠标在“key”框内移动,以获得足够的随机数据供生成密钥使用:
※期间,你会看到进度条上面有个提示 “Please generate some radomness by moving the mouse over the blank area.” ,意思就是让你用鼠标在空白区域随机移动。随着鼠标在空白区域的移动,进度条会一直走下去。停止移动鼠标,进度条也就停止了。所以,那我们要移动鼠标,直到进度条走满为止。
完成后的窗口如下:
其中:
引用
Key comment:是注释,不会影响密钥的有效性,但可作为自己用于区别其他密钥的参考;
Key passphrase 和 Confirm passphrase :用于保护私钥,如果不输入该信息,那么任何人只要拿到该私钥,即可无密码登陆系统, 非常危险;通常情况下,我是建议大家输入的,但这里为了方便说明,暂时留空,请看后面使用的说明。
Key passphrase 和 Confirm passphrase :用于保护私钥,如果不输入该信息,那么任何人只要拿到该私钥,即可无密码登陆系统, 非常危险;通常情况下,我是建议大家输入的,但这里为了方便说明,暂时留空,请看后面使用的说明。
随后,点击“Save private key”保留私钥。
如果没有输入Key passphrase信息,会有警告:
输入私钥的文件名:
※公钥信息可以不用保留在本地的,puttygen可以从私钥得到它,验证时也不会用到。
2、修改openssh配置
修改/etc/ssh/sshd_config:
引用
ChallengeResponseAuthentication no #关闭挑战应答方式
UsePAM no #不使用PAM认证
UsePAM no #不使用PAM认证
然后重启sshd服务,原因见: 这里
3、拷贝公钥信息
上面密钥信息窗口的“Key”框最后生成的就是公钥信息:
需要把该信息拷贝到Linux服务器的特定文件中: ~/.ssh/authorized_keys
其中,“~”表示对应用户的主目录,以root为例。
若.ssh目录不存在,请创建它,并把公钥信息写入文件中:
# mkdir ~/.ssh
# chmod 700 ~/.ssh
# vi ~/.ssh/authorized_keys
# chmod 644 ~/.ssh/authorized_keys
# chmod 700 ~/.ssh
# vi ~/.ssh/authorized_keys
# chmod 644 ~/.ssh/authorized_keys
※请务必留意:文件和目录的权限问题,用户必须是将要进行认证的用户,而权限必须是0644,也就是禁止其他人对该文件写入信息。(否则,某些有心人把自己的公钥写入这里,他也可以无密码进来了)
因为,通常umask是0022或0002的,所以请使用chown和chmod修改为对应的权限咯。
4、使用putty使用密钥登陆
对putty进行一些简单配置,即可使用密钥登陆Linux服务器。
选择Connection-SSH-Auth,在“Private key file for authentication”输入密钥的路径:
然后在Connection的“Auth-login username”输入登陆的用户名,例如root:
◎Putty 0.60 版本在Connection-Data页内。
然后点击Open即可:
若一切正常,则可以在session中Save保存配置。
三、使用OpenSSH生成密钥
密钥既可使用putty生成,也可用OpenSSH生成。
1、Linux下生成密钥
运行:
引用
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <-密钥路径
Enter passphrase (empty for no passphrase): <-密钥保护密码
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. <-私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <-公钥
The key fingerprint is:
17:28:4c:c3:e4:18:d4:c2:31:bd:be:a7:a9:d4:a8:48 root@mail.linuxfly.org
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <-密钥路径
Enter passphrase (empty for no passphrase): <-密钥保护密码
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. <-私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <-公钥
The key fingerprint is:
17:28:4c:c3:e4:18:d4:c2:31:bd:be:a7:a9:d4:a8:48 root@mail.linuxfly.org
2、把公钥信息写入authorized_keys文件中
运行:
# cd ~/.ssh
# cat id_rsa.pub >> authorized_keys
# cat id_rsa.pub >> authorized_keys
3、生成putty的私钥
由于SSH的标准中,并没有固定密钥文件的格式。而Putty使用的私钥格式和OpenSSH生成的有点不同,需要转换一下。
a)把id_rsa传到Windows机器上
b)使用puttygen的“Load”读取id_rsa文件
这里也可以从图中的公钥信息,与id_rsa.pub对比一下,应该是一致的。
c)点击“Save private key”保留私钥。
d)putty使用该新的私钥登陆服务器即可。