ssh config 配置文件

这篇文章讲一下 ssh 中的 config 配置文件。

config 文件一般在 ~/.ssh/ 或者 C://Users//<username>//.ssh 目录下面,没有后缀名。如果在上述目录中找不到 config 文件,那么可以新建一个。

背景需求

我们使用 ssh 登录服务器时,一般做法是:

1
ssh example@example.com -p xxxx

然后再输入登录密码。

如果需要登录到不同的服务器,并且每个服务器的登录名、地址、端口号、登录密码都不同的话,那么记忆起来就会显得繁琐,那有没有一种办法可以不用输入密码登录,直接输入服务器的一个别名就可以登录的呢?答案是有的。

第一种比较容易想到的方法是建立一些脚本文件,在脚本里面将 ssh 登录需要的各种参数命令都预先写好,然后将该脚本加入到环境变量中,这样方便在任何地方都能调用。具体的实现方法可以 参考这篇

上面方法有一个缺陷就是,每次登录还是需要输入密码。

还有一种更加简单的方式,那就是使用 config 配置文件。

具体实现

加入我们需要登录的服务器是 example.com, 登录用户名是 example,登录端口是 2222(ssh 默认登录端口是 22),那么我们可以在 config 文件中加入这些:

1
2
3
4
Host my_server 
HostName example.com
User example
Port 2222

几个字段的解释如下:

  • Host:就是你设置的服务器别名,可以是任意自己方便记忆的名字;
  • HostName: 服务器的实际地址,可以是 IP 地址,也可以是域名地址;
  • User :ssh 登录名;
  • Port:端口号。如果是默认端口号 22,那此字段可以省略。

现在,你可以直接在终端中:

1
ssh my_server

来登录服务器了。但是每次登陆还是需要输入密码。

那怎么配置来实现免密登录呢?答案是将本机的公钥存放到服务器上。

将本机中的 id_rsa.pub 公钥文件(windows 系统在 C://Users//<username>//.ssh 目录下,本地终端先切换到此目录下)传到服务器上任意位置,这里传到服务器 home 目录下:

1
scp id_rsa.pub my_server:~  # 这里就可以直接使用 my_server 了

接着将 id_rsa.pub 中的公钥复制到服务器上的 authorized_keys 文件中。同样,如果服务器 ~/.ssh 目录下没有此文件,那么新建一个。

可以利用 cat 命令以及 Linux 中的输出重定向 >> 来实现。服务器首先切换到 home 目录下。

1
cat id_rsa.pub >> .ssh/authorized_keys

最后还需要将 ssh 服务重启一下:

1
/etc/init.d/ssh restart

回车后需要输入服务器的密码完成认证。

至此,就大功告成。现在只需要在本地终端中输入:

1
ssh my_server

就能够免密登录到自己的服务器了。

References

Donate comment here