原文

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

二、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文件放到下面)

三、为什么要使用公钥认证 
通常,通过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 格式的密钥。之后即可使用公钥认证进行连接了。

(转)Linux SSH配置和禁止Root远程登陆设置的更多相关文章

  1. Debian修改ssh端口和禁止root远程登陆设置

    linux修改端口22vi /etc/ssh/sshd_config找到#port 22将前面的#去掉,然后修改端口 port 1234重启服务就OK了service sshd restart或/et ...

  2. Linux修改SSH端口和禁止Root远程登陆

    Linux修改ssh端口22 vi /etc/ssh/ssh_config vi /etc/ssh/sshd_config 然后修改为port 8888 以root身份service sshd res ...

  3. 【转】Linux修改SSH端口和禁止Root远程登陆

    Linux修改ssh端口22 vi /etc/ssh/ssh_config vi /etc/ssh/sshd_config 然后修改为port 8888 以root身份service sshd res ...

  4. Linux修改SSH端口,并禁止Root远程登陆

    1.更改ssh远程登录端口: #vi /etc/ssh/ssh_config将port改为你想要的端口,例如8888.默认是#port 22,把#号删掉改为 port 8888即可. 还要更改以下文件 ...

  5. linux修改ssh端口 以及禁止root远程登录 (实验机 CentOs)

    把ssh默认远程连接端口修改为3333 1.编辑防火墙配置: vi /etc/sysconfig/iptables 防火墙新增端口3333,方法如下: -A INPUT -m state --stat ...

  6. linux下允许和禁止root远程登录的方法

    1.vi /etc/ssh/sshd_config,将PermitRootLogin的值改成yes,并保存 PermitRootLogin yes 另外需要添加 AllowUsers root SA ...

  7. Linux生成ssh密钥免密登录,允许/禁止密码登录,允许/禁止root远程登录,更改ssh端口

    进入想要使用密钥登录的用户家目录 cd 或 cd ~ 执行密钥创建命令,不行可能需要下载openssh-server与openssh-client ssh-keygen -t rsa -P " ...

  8. Linux禁止root远程登录及修改默认端口

    1.1 修改SSHD配置,禁止root远程登录 禁止登录之前先穿甲一个可以远程登录的普通用户,以免造成登录不了的情况 [root@jhkj66 ~]# useradd yw001 #创建用户 [roo ...

  9. 禁止root远程登录 sshd问题:A protocol error occurred. Change of username or service not allowed

    在研究Linux安全的时候遇到一个问题,原本打算修改linux直接远程root登陆,修改为sshd的配置文件后 Nano /etc/ssh/sshd_config 把#PermitRootLogin ...

随机推荐

  1. 《Inside C#》笔记(二) 初识C#

    一 程序的编译.构成 a) 编写C#代码一般用VS,但作者在这儿介绍了使用记事本编写C#代码并编译运行的过程,以便对VS有更深入的认识. 用记事本编写C#代码后,修改文本文件的后缀为.cs,然后用cs ...

  2. Docker容器服务发现方案

    一.      目的 在服务在容器中部署时,外部调用服务需要知道服务接口ip及端口号,这样导致部署时需要配置,从而增加部署的困难.本文档主要介绍如何使用ningx反向代理和consul进行自动化服务发 ...

  3. sql server 运维时CPU,内存,操作系统等信息查询(用sql语句)

    我们只要用到数据库,一般会遇到数据库运维方面的事情,需要我们寻找原因,有很多是关乎处理器(CPU).内存(Memory).磁盘(Disk)以及操作系统的,这时我们就需要查询他们的一些设置和内容,下面讲 ...

  4. EntityFramework Code-First 简易教程(十一)-------从已存在的数据库中映射出表

    怎样从一个已存在的数据库中映射表到 entity 实体? Entity Framework 提供了一个简便方法,可以为已存在的数据库里的所有表和视图创建实体类(entity class),并且可以用 ...

  5. Unity 4.6 GUI

    一起来窥探Unity的下一代GUI 预览 UI组件 UI结构 Canvas Button Selection List(滑动列表)

  6. sklearn datasets模块学习

    sklearn.datasets模块主要提供了一些导入.在线下载及本地生成数据集的方法,可以通过dir或help命令查看,我们会发现主要有三种形式:load_<dataset_name>. ...

  7. tkinter学习系列(四)之Button 控件

    目录 目录 前言 (一)基本用法和可选属性 ==1.基本用法== ==2.可选属性== (二)属性的具体实现和案例 ==1.常用属性== ==案例一== ==2.按钮里的图片== ==案例二== == ...

  8. Unity琐碎(1) 编辑器参数修改

    今天在写编辑器面板的时候,突然发现如果面板参数变化的时候,不能实时修改表现效果(参数没有生效). public int monsterCount ; void Awake() { monsterCou ...

  9. Reachability

    一.Reachability中介绍了取得/检测网络状态的方法. 二.使用 1.添加源文件:Reachability.h和Reachability.m 2.添加framework———SystemCon ...

  10. openssl交叉编译记录

    本次任务是要完毕嵌入式Linux下对openssl程序的支持.     我的开发环境:ARM9开发板 和 嵌入式Linux操作系统.装有Linux系统(我的是ubuntu9.04)的PC机一台.串口和 ...