配置 SSH config

说明

SSH 的经典用途是登录到远程服务器中执行命令,除此之外 SSH 也支持隧道协议、端口映射和 X11 连接。借助 SFTP 或 SCP 协议还可以传输文件。

一般来说利用 SSH 登录远程服务器需要执行下面指令:

1
$ ssh user@host

这里默认通过 SSH 连接远程服务器的 22 端口,如需要指定端口可使用 -p port

SSH 提供两种级别的安全验证:

  1. 基于密码的安全验证。知道帐号和密码,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的服务器在冒充真正的服务器,无法避免被“中间人”攻击。
  2. 基于密钥的安全验证。需要依靠密钥,也就是你必须为自己创建一对密钥,并把公有密钥放在需要访问的服务器上。客户端软件会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公有密钥,然后把它和你发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有密钥加密“质询”并把它发送给客户端软件。从而避免被“中间人”攻击。

使用第一种方法进行登录,不但每次都要输入密码同时也有安全隐患。

生成密钥

可以使用 ssh-keygen 生成密钥。默认设置下会在 $HOME/.ssh/ 目录下生成两个文件: id_rsa 和 id_rsa.pub,分别是私钥和公钥。

1
$ ssh-keygen

远程服务器将用户的公钥保存在 $HOME/.ssh/authorized_keys 文件中。公钥就是一段字符串,只需要将刚生成的公钥追加到远程服务器的 authorized_keys 文件中即可。

执行下面命令将本地公钥追加到远程服务器 authorized_keys 文件中。

1
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

该命令进行了如下操作:

  1. ssh user@host 表示登录远程主机。
  2. mkdir -p .ssh 表示在远程主机的主目录下如果没有 .ssh 目录则新建一个 .ssh 目录。
  3. cat >> .ssh/authorized_keys 表示将输入内容追加到 .ssh/authorized_keys 中。
  4. < ~/.ssh/id_rsa.pub 表示将当前用户的目录下的 ~/.ssh/id_rsa.pub 作为输入。

远程主机的 .ssh 目录权限应为 700authorized_keys 文件权限应为 600

设置 SSH config

将公钥保存到远程服务器后,省去了输入密码的操作,安全性也更高。但是每次登陆还要输入 user@host ,还是需要记住用户名和主机名还是十分麻烦的。在这里可以通过 ~/.ssh/config 配置文件来实现更方便的 SSH 操作。

编辑 ~/.ssh/config 文件:

1
2
3
4
5
Host test
HostName host
Port 22
User user
IdentityFile ~/.ssh/id_rsa

这里新增了一个 SSH 的配置。

  1. Host 指定了用于匹配的名称,如果 SSH 匹配上了 test ,就使用接下来的配置进行登录
  2. HostName 指定了远程服务器的地址
  3. Port 指定了登录端口
  4. User 指定了登录用户名
  5. IdentifyFile 指定了私钥

这时如果执行指令:

1
$ ssh test

相当于执行指令

1
$ ssh user@host

通过 SSH config 文件不但可以简化 SSH 登录,还可以同时配置多个 Host 。SSH 的 Host 字段还支持通配符,如果有更多需求可以参考文档

禁止 SSH 密码登录

编辑远程服务器 /etc/ssh/sshd_config 文件。

禁用密码验证,修改 PasswordAuthentication 值为 no :

1
PasswordAuthentication no

启用密钥验证:

1
2
RSAAuthentication yes
PubkeyAuthentication yes

指定公钥验证文件路径:

1
AuthorizedKeysFile .ssh/authorized_keys

之后重启 ssh 服务:

1
2
3
4
5
6
7
8
// Ubuntu 系统
$ service ssh restart

// RHEL / CentOS 系统
$ service sshd restart

// Debian 系统
$ /etc/init.d/ssh restart

参考资料: