目前我有两台开发机,一台公司,一台私人,日常开发对开发机强依赖,但一直以来都是用最原始的方式登录机器, ssh root@xxx.xxx.xxx.xxx,接着输入 password,偶尔会出现密码和 IP 记混的状况,得尝试好几次,不妨用十分钟优化这个过程,一劳永逸。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 优化前
# 公司机器
ssh root@xxx.xxx.xxx.xxx
password: ******
# 私人机器
ssh root@xxx.xxx.xxx.xxx
password: ******

#优化后
#公司机器
ssh dev-server
# 私人机器
ssh leeon-server

网络上有海量的配置教程,因为过程遇到一个坑,所以花点篇幅记录下我的配置过程。

环境

  • 本地
    • 系统:MacOS
    • 终端:iTerm2
  • 开发机
    • 系统:centOS

设置主机别名

我们可以通过 SSH 配置文件配置主机别名,取代长串的 IP,用 root 权限打开 /etc/ssh/ssh_config~/.ssh/config 进行配置

1
2
3
4
5
6
7
8
# 配置别名,别名自定
Host leeon-server
# IP 必填
hostname xx.xx.xx.xx
# 端口 选填
port 22
# 登录名 选填
user root

现在我们可以通过别名进行登录

1
2
ssh leeon-server
password: ******

现在不用输长串 IP,但是仍需要密码,下面设置免密码登录

设置公钥登录

如果你用过 git 远程仓库,对公钥 public key 肯定不陌生,这里提一下如何生成密钥

生成公钥

生成公钥很简单,执行 ssh-keygen 一路回车,就在 ~/.ssh/ 目录下生成了 id_rsa.pubid_rsa,但我不推荐这种方式。

如果开发机较多,为了方便管理不同的开发机(公司机器、个人机器),或者访问多个 Git 代码库,建议生成独立的公钥,这样你就不会手滑把公司的代码推上 Github ~

1
2
3
4
5
6
# 公司机器
ssh-keygen -t rsa -C "xxx@abc.com" -f ~/.ssh/id_rsa_dev
# 生成 id_rsa_dev id_rsa_dev.pub

ssh-keygen -t rsa -C "xxx@abc.com" -f ~/.ssh/id_rsa_leeon
# 生成 id_rsa_leeon id_rsa_leeon.pub

配置 SSH 公钥登录

第一步

需要将我本地生成的公钥粘贴到开发机~/.ssh/authorized_keys 文件中,如果没有 authorized_keys 文件,请新建。

配置我个人的开发机,将 id_rsa_leeon.pub 内容粘贴到开发机~/.ssh/authorized_keys 中,
配置公司开发机,则将 id_rsa_dev.pub 内容粘贴到开发机~/.ssh/authorized_keys 中。

第二步

需要修改本地的 SSH 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 个人开发机
Host leeon-server
hostname xx.xx.xx.xx
port 22
user root
# 授权方式
PreferredAuthentications publickey
# 私钥配置,注意是与公钥对应
IdentityFile ~/.ssh/id_rsa_leeon
# 公司开发机
Host dev-server
hostname xx.xx.xx.xx
port 22
user root
# 授权方式
PreferredAuthentications publickey
# 私钥配置,注意是与公钥对应
IdentityFile ~/.ssh/id_rsa_dev

下面我们就可以尝试免密码登录了

免密码登录

登录我的个人开发机试试

ssh leeon-server

登陆成功!

提示错误 ?

我第一次尝试免密码登录时遇到以下错误,

提示错误Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

尝试将开发机中的 .ssh 目录权限设置为 600 或者 700

1
2
3
chmod 700 .ssh/
chmod 600 .ssh/authorized_keys
restorecon -r -vv .ssh/authorized_keys

安全配置

为了服务器的安全,我们需要做一些必要的配置,需要对 /etc/ssh/sshd_config 的配置进行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
# 关闭允许任何密码认证
ChallengeResponseAuthentication no

# 禁止密码登录
PasswordAuthentication no

UsePAM no

# 禁止 root 登录
PermitRootLogin no

# 修改默认的登录端口,下面举个例子,将 port 配置为 3456此处修改,上面的客户端配置的端口需要同步修改
Port 3456

保存修改,执行 service sshd restart 命令,生效配置,修改完,不要急着退出,先验证能再次登录再退出,可以避免被自己锁门外……