(转)Linux SSH配置和禁止Root远程登录设置

原文linux

1、修改vi /etc/ssh/sshd_config 文件 
一、修改默认端口:默认Port为22,而且已经注释掉了;修改是把注释去掉,并修改为其它的端口。 
二、禁止root用户远程登录:修改PermitRootLogin,默认为yes且注释掉了;修改是把注释去掉,并改为no。 
三、PermitEmptyPasswords   no不容许空密码用户login 


2、ssh的公钥认证配置: 
修改vi /etc/ssh/sshd_config 文件 
RSAAuthentication yes        # 启用 RSA 认证(默认是注释掉的,将注释去掉,若是不是yes,改成yes) 
PubkeyAuthentication yes     # 启用公钥认证(默认是注释掉的,将注释去掉,若是不是yes,改成yes) 
PasswordAuthentication no    # 禁止密码认证(改成no,默认为yes是用密码认证) 
StrictModes no   #修改成no,默认为yes.若是不修改用key登录是出现server refused our key(若是StrictModes为yes必需保证存放公钥的文件夹的拥有与登录用户名是相同的.“StrictModes”设置ssh在接收登陆请求以前是否检查用户家目录和rhosts文件的权限和全部权。这一般是必要的,由于新手常常会把本身的目录和文件设成任何人都有写权限。) 


以后从新启动ssh服务:/etc/init.d/ssh restart 


生成登录公钥与私钥, 
[root@usousou192_168_0_21 ssh]# ssh-keygen -t rsa 
Generating public/private rsa key pair. 
Enter file in which to save the key (/root/.ssh/id_rsa): /home/linden.guo/.ssh/id_rsa (生成私钥与公钥存放位置) 
Enter passphrase (empty for no passphrase): 输入密码 
Enter same passphrase again:再次输入密码 
Your identification has been saved in /home/linden.guo/.ssh/id_rsa.    (生成的私钥) 
Your public key has been saved in /home/linden.guo/.ssh/id_rsa.pub. (生成的公钥) 
The key fingerprint is: 
76:04:4d:44:25:37:0f:b1:a5:b7:6e:63:d4:97:22:6b root@usousou192_168_0_21 

将生成的公钥匙id_rsa.pub传到要登录的服务器上并追加到authorized_keys文件中,放到用户目录的.ssh中 cat id_rsa.pub >> .ssh/authorized_keys (若是没有authorized_keys,可直接将id_rsa.pub重命名为authorized_keys,本身认为,没有测试过) 


使用putty链接ssh服务器。为了使用公钥认证,咱们须要同时下载 puttygen 这个工具来生成 putty 所使用的密钥 
若是你按照上面的介绍,在Linux下生成了公钥和密钥的话,那么须要利用 puttygen 将密钥转换成 putty 使用的格式。将Linux下生成的密钥 id_rsa 复制到 Windows 下。启动 puttygen,而后单击Load按钮,选择文件类型为全部文件,而后选择 id_rsa,打开。若在生成密钥时输入了密码,则打开时须要输入该密码(用linux生成密钥时输入的密码)。以后就能够在 puttygen 的主界面上单击 Save private key,保存成 putty 格式的密钥。 

最好肯定用户目录下的.ssh文件夹对于拥有者有读写执行的权限,最低要有执行权限,如700或者100;authorized_keys文件中有读的权限 


注:AuthorizedKeysFile      .ssh/authorized_keys(认证文件的目录与公钥文件名称,能够修改,而且相应目录也要修改,如AuthorizedKeysFile      .sshd/linden.guo_keys,须要在用户目录下创建.sshd文件夹,将linden.guo_keys文件放到下面) 


3、为何要使用公钥认证 
一般,经过ssh登陆远程服务器时,使用密码认证,分别输入用户名和密码,二者知足必定规则就能够登陆。可是密码认证有如下的缺点: 

用户没法设置空密码(即便系统容许空密码,也会十分危险) 
密码容易被人偷窥或猜到 
服务器上的一个账户若要给多人使用,则必须让全部使用者都知道密码,致使密码容易泄露,并且修改密码时必须通知全部人 
而使用公钥认证则能够解决上述问题。 

公钥认证容许使用空密码,省去每次登陆都须要输入密码的麻烦 
多个使用者能够经过各自的密钥登陆到系统上的同一个用户 
公钥认证的原理 
所谓的公钥认证,其实是使用一对加密字符串,一个称为公钥(public key),任何人均可以看到其内容,用于加密;另外一个称为密钥(private key),只有拥有者才能看到,用于解密。经过公钥加密过的密文使用密钥能够轻松解密,但根据公钥来猜想密钥却十分困难。 

ssh 的公钥认证就是使用了这一特性。服务器和客户端都各自拥有本身的公钥和密钥。为了说明方便,如下将使用这些符号。 

Ac 客户端公钥 
Bc 客户端密钥 
As 服务器公钥 
Bs 服务器密钥 

在认证以前,客户端须要经过某种方法将公钥 Ac 登陆到服务器上。 

认证过程分为两个步骤。 

会话密钥(session key)生成 
客户端请求链接服务器,服务器将 As 发送给客户端。 
服务器生成会话ID(session id),设为 p,发送给客户端。 
客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。 
客户端将 r 用 As 进行加密,结果发送给服务器。 
服务器用 Bs 进行解密,得到 r。 
服务器进行 r xor p 的运算,得到 q。 
至此服务器和客户端都知道了会话密钥q,之后的传输都将被 q 加密。 
认证 
服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端 
客户端使用 Bc 解密 S(x) 获得 x 
客户端计算 q + x 的 md5 值 n(q+x),q为上一步获得的会话密钥 
服务器计算 q + x 的 md5 值 m(q+x) 
客户端将 n(q+x) 发送给服务器 
服务器比较 m(q+x) 和 n(q+x),二者相同则认证成功 
服务器端设置 
使用公钥认证须要对服务器进行一些设置。修改 /etc/sshd_config 的如下配置。 

RSAAuthentication yes        # 启用 RSA 认证 
PubkeyAuthentication yes     # 启用公钥认证 
PasswordAuthentication no    # 禁止密码认证StrictModes no   #修改成no,默认为yes.若是不修改用key登录是出现server refused our key而后从新启动 sshd。 

/etc/init.d/ssh restart客户端设置 
Linux 
假设客户端的用户 charlee 要以 guest 用户登陆到服务器上。首先在客户端执行下面的命令。 

[charlee@client:~]$ ssh-keygen -t rsa 
Generating public/private rsa1 key pair. 
Enter file in which to save the key (/home/charlee/.ssh/id_rsa): 
Enterpassphrase (empty for no passphrase): 输入密码 
Enter same passphrase again:   再次输入密码 
Your identification has been sabed in /home/charlee/.ssh/id_rsa 
Your public key has been saved in /home/charlee/.ssh/id_rsa.pub生成的文件保存在主目录的 .ssh 目录下,id_rsa为客户端密钥,id_rsa.pub 为客户端公钥。 

以后,经过 U 盘等方式将公钥 id_rsa.pub 复制到服务器上,并执行下列命令。 

[guest@server:~]$ cat id_rsa.pub >> .ssh/authorized_keys其中 id_rsa.pub 是客户端的用户 charlee 的公钥。 

这样在客户端便可经过如下的命令链接服务器。 

[charlee@client:~]$ ssh -l guest server若不想每次登陆服务器时都输入密码,能够先执行下列命令: 

[charlee@client:~]$ ssh-add 
Enter passphrase for /home/charlee/.ssh/id_rsa: 输入密码 
Identity added: /home/charlee/.ssh/id_rsa (/home/charlee/.ssh/id_rsa)之后登陆服务器就不须要输入密码了。 

Windows 
假设咱们使用putty链接ssh服务器。为了使用公钥认证,咱们须要同时下载 puttygen 这个工具来生成 putty 所使用的密钥。 

使用Linux下生成的公钥和密钥的状况 
若是你按照上面的介绍,在Linux下生成了公钥和密钥的话,那么须要利用 puttygen 将密钥转换成 putty 使用的格式。 

将Linux下生成的密钥 id_rsa 复制到 Windows 下。启动 puttygen,而后单击Load按钮,选择文件类型为全部文件,而后选择 id_rsa,打开。若在生成密钥时输入了密码,则打开时须要输入该密码。以后就能够在 puttygen 的主界面上单击 Save private key,保存成 putty 格式的密钥。 

使用puttygen生成公钥和密钥 
你也能够利用 puttygen 直接生成公钥和密钥。打开 puttygen,而后在画面下方的 Parameters 栏选择加密算法和加密长度(通常取默认值便可),最后单击 Generate。画面上会出现一个进度条,在界面上随意移动鼠标以生成随机数。最后提示生成结束,单击 Save private key 按钮保存密钥。最后将上方的Public key for pasting into OpenSSH authorized_keys file栏中的内容复制到 Linux 下用户主目录下的 ~/.ssh/authorized_keys 文件中。 

设置 putty 使用公钥认证 
先在putty中设置好链接的主机名、端口等信息(说明省略)。使用公钥认证须要设置两个地方:一个是 Connection 中的 Auto-login username,输入在服务器上的用户名;另外一个是 Connection->SSH->Auth中的 Private key file for authentication,选择刚才转换或生成的 .ppk 格式的密钥。以后便可使用公钥认证进行链接了。算法

相关文章
相关标签/搜索