这篇文章讲一下 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 | Host my_server |
几个字段的解释如下:
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 |
就能够免密登录到自己的服务器了。