环境


  • Windows10 Xshell 7
  • Linux CentOS Stream 8 64bit

(不同的环境的操作和命令可能不太一样)



基本说明


SSH(Secure Shell)是一种用于安全远程登录的协议。

现在我们常用的远程软件OpenSSH就是SSH协议的免费开源实现。

使用ssh服务可以远程登录控制终端,常用的认证方式有两种:

  • 口令认证:使用服务端的用户名和该用户密码登录,这种认证方式不是很安全。
  • 公钥认证:使用由非对称算法(如RSA算法)生成的一对密钥(公钥和私钥)进行登录认证,这种认证方式相对安全。

下面是两种认证的配置步骤。



配置步骤


口令认证


口令认证配置非常简单,只要允许ssh服务端的口令认证功能就行(默认是开启口令认证的)。

开启口令认证功能

  1. 修改sshd配置文件开启口令认证功能,sshd配置文件目录为”/etc/ssh/sshd_config”,ssh默认是开启口令认证的,当然你也可以再确认一眼。
    编辑配置文件(/etc/ssh/sshd_config):
    (行首带“#”的是注释,“#”后面跟的配置是不生效的)

    1
    PasswordAuthentication yes

    如果想关闭口令认证功能,只要把“yes”改成“no”就行,像下面这样:

    1
    PasswordAuthentication no

  2. 更新配置之后都要记得重启服务重新加载配置。终端执行指令:
    (报错的话有可能是你权限不够,可以登录root用户再执行命令。)

    1
    systemctl restart sshd

口令认证远程登录

  1. 确认服务端配置正常并且服务正常运行就可以在客户端尝试远程登录了。
    再提醒一下,如果要以root用户登录的话,也要开启允许root用户登录,一般默认是开启的。
    编辑配置文件(/etc/ssh/sshd_config):

    1
    PermitRootLogin yes

  2. 使用下面的命令远程登录:
    (ssh后面直接跟IP地址也可以,默认以root用户登录)
    <user_name>:登录用户名
    <IPaddress>:终端的IP地址

    1
    ssh <user_name>@<IPaddress>

    按下回车之后如果能连接上它会提示你输入口令,输入正确口令即可登录。


公钥认证


公钥认证配置稍微比口令认证配置麻烦一点,不过也还是简单的,并且公钥认证登录要比口令认证安全很多。

生成密钥

你可以使用任何合适的方式生成密钥对,比如Xshell上也提供了生成密钥对的功能:



我这里就使用SSH自带的密钥生成工具:
(ssh-keygen默认使用的是RSA算法)

1
ssh-keygen

看到保存位置默认为用户目录下的“.ssh”文件夹会想到什么?
是的,公钥认证远程登录是绑定用户的,也就是说你在服务端为该用户配置了公钥,然后你在客户端使用私钥去远程登录服务端,登录的只能是配置了与你的私钥配对的公钥的用户,当然啦,登录之后你也可以用命令去切换用户。


最终会获得两个密钥,分别是“id_rsa”和“id_rsa.pub”,带“.pub”(public)的是公钥,另外一个就是私钥。

(你要想办法把公钥弄到服务端,把私钥弄到客户端,用文件传输工具什么的)

只要将公钥配置到服务端,再将私钥配置到客户端,就可以随时从客户端直接登录到服务端(登录时SSH自动完成认证)。


将公钥配置到服务端

  1. 开启公钥认证,编辑配置文件(/etc/ssh/sshd_config):

    1
    PubkeyAuthentication yes

  2. 将公钥配置到用户下的“.ssh/authorized_keys”文件,就是如果这个文件为空的话,直接把公钥的内容复制粘贴到这个文件就行。
    (如果用户目录下没有这个文件夹和文件就自己创建。)
    这个是按照我的步骤操作的命令,要在用户家目录下:

    1
    cat .ssh/id_rsa.pub >> .ssh/authorized_keys



  1. 配置完之后重启一下sshd服务:
    (报错的话有可能是你权限不够,可以登录root用户再执行命令。)
    1
    systemctl restart sshd

将私钥配置到客户端

客户端环境因人而异,我这里示例使用的是Windows10的Xshell 7软件,如果你是其他客户端环境请参考其他相应教程。

先将私钥文件导入Xshell的密钥库:

  1. 选择“工具”,再点击“用户密钥管理者”。


  1. 点击导入之后会弹窗让你选择文件,选择你的私钥文件。


  1. 如果你前面生成密钥对的时候设置了密钥的密码,那么会弹窗让你输入密码,输入正确密码即可。
    (如果你没设密码,后面又想设密码,改密码要你输入原密码,让原密码为空即可。)


在Xshell新建会话:

  1. 选择“连接”。
  • “名称”随意,填你想填;
  • “协议”选SSH;
  • “主机”填你服务端IP地址;
  • “端口”填你服务端SSH开启的端口,一般为默认的22。


  1. 选择“用户身份验证”。
  • “用户名”填服务端登录用户名;
  • “密码”是服务端用户的登录密码,就是口令认证要用到,因为现在配置的是公钥认证登录,这里可以不填;
  • “方法”勾选“Public Key”并选中将其上移至首位,然后取消勾选“Password”。


  1. “方法”选中“Public Key”,点击“设置”。


  1. 设置密钥。
  • “用户密钥”选择你刚才导入的私钥;
  • “密码”就是私钥的加密密码,如果没设置的话留空即可。
    点击确定保存。


  1. 最后再确认保存会话,至此,客户端就配置完成啦!

公钥认证远程登录

Xshell连接配置好的会话很简单,直接双击要连接的会话就行:
(直接就连上了,SSH会自动完成公钥认证。)



本章完。