Arch Linux 入门系列-ssh配置(xshell + 虚拟机的arch linux)

经过ssh,能够相对很安全的操做远程服务器。使用的软件包 openssh 是该协议的开源实现。php

安装 openssh

虚拟机arch linux 执行: #sudo pacman -S opensshlinux

ssh 认证方式

详细说下这部分。 我操做的两种认证过程: 用户名+密码认证和公钥认证算法

关于公钥和密钥: 他们是成对出现的,信息通过公钥加密, 只有配对的密钥才能解密。公钥是能够任意分发的,私钥必须本身持有,确保本身能惟一解密信息。shell

1. 用户名+密码:

  • 访问步骤:缓存

  1. 用户第一次访问远程服务器的时候,服务器把本身 public key 发送到客户端安全

  2. 客户端用服务器的 public key 加密本身的密码,并发送到服务器服务器

  3. 服务器用本身的 private key 解密信息。而后进行验证信息是否有错。
    这个过程当中,只涉及到了服务器端的公私密钥对。并发

优势:密码是安全的,由于只有服务器端的私钥才能解密。这点比传统的 telnet、ftp用的明文传递安全。ssh

缺点:不能避免中间人攻击。把上述过程当中的服务器替换成攻击者的服务器,流程也是没有问题的。攻击者欺骗客户端,把本身的 public key发给客户端。攻击者再用本身的私钥解密密码,垂手可得的拿到客户端的密码。而后再伪装成客户端请求真正的服务器ide

2. 公钥认证

这种方式用到了两组密钥对。客户端和服务端都有本身的公私密钥对。

  • 提早准备:

    1. 将客户端的公钥上传到服务器。(这步必须确保安全传到正确的服务器,能够用 usb、#ssh-copy-id user@host命令)

    2. 服务器将该公钥写入到 ~/.ssh/authorized_keys 文件。该文件一行存放一个 public key。

  • 访问步骤:

  1. 客户端请求访问服务器

  2. 服务器生成一个会话用的公私密钥对,并将会话公钥用该客户端对应的 public key 加密,返回给客户端

  3. 客户端用private key 解密会话公钥。并用该会话公钥加密发给服务器的信息

  4. 服务器用会话私钥解密客户端的信息

接下来的客户端-服务器的通讯,都经过对方的公钥加密信息,发给对方的消息,只有对方的私钥能解密。这个过程涉及到了两组公私密钥对。

优势:不须要使用密码,提升了安全性。即便有中间人攻击,中间人也没法拿到客户端的私钥解密信息,也不能拿到会话私钥解密服务端的消息。确保了信息安全。

  • 具体涉及的命令:

  1. 生成密钥对。xshell中能够生成的密钥对,只是公钥格式好像有问题,不能直接使用。在虚拟机里执行
    #ssh-keygen -t rsa

生成一组公私密钥对,该指令默认生成 2048位的 rsa 算法类型的密钥对。命令执行过程以下

Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa): 
/home/test/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
f2:75:41:ad:c7:4d:38:0c:d2:aa:d5:aa:9a:f5:84:86 test@hostname.com

第一步是提示输入保存密钥文件的路径,输入enter默认便可。(测试机生成过一次覆盖便可)。

第二步提示提示输入 passphrase,这个至关于给密钥加了个密码。建议在要求更加安全的状况下使用, 通常输入 enter 默认为空便可。
id_rsa 文件保存的是私钥, 公钥的文件命名是private_key_filename.pub

生成完毕后,将公钥copy到服务器~/.ssh/authorized_keys。我是虚拟机,直接复制粘贴了 :),你也可使用命令:#cat yourpubkeyfile >> ~/.ssh/authorized_keys
客户端是 xshell,经过 工具->用户私钥管理,导入该私钥。便可创建对服务端的访问。对于远程服务器初次安装 key 能够经过 ssh-copy-id -i ~/.ssh/your_key root@remote_ip 命令,执行命令后会提示输入密码,输入完毕后,便公钥导入成功。

基本配置介绍

/etc/ssh/sshd_config 是ssh服务端配置文件
/etc/ssh/ssh_config 是ssh客户端的配置文件。 在个人环境中,使用xhell,使用不到这个文件。

  1. /etc/ssh/sshd_config中添加 AllowUsers userA userB 该指令限制仅userA、userB 能够经过ssh链接。新添加用户经过空格分隔,每次修改后 sudo systemctl restart sshd 重启 sshd守护进程

  2. ~/.ssh/known_hosts~/.ssh/authorized_keys 分别是客户端和服务端管理公钥的文件。

  • 服务端每增长一个客户端的公钥,都要写入服务端~/.ssh/authorized_keys文件

  • 客户端也常常须要链接多个服务端,每一个服务端的host与对应的 public key关系保存在客户端 know_hosts

他们的详细格式请查阅手册 #man sshd;
当远程主机IP变化、重装系统等, 会致使known_hosts 缓存的信息失效,更新便可

参考

  1. IBM ssh安全性和配置入门

  2. Arch Linux Wiki:SSH 配置#.E8.BF.9E.E6.8E.A5.E5.88.B0.E6.9C.8D.E5.8A.A1.E5.99.A8)

相关文章
相关标签/搜索