经常使用ssh连接服务器的朋友,有时为了安全可能ssh还使用了非默认端口(22),这样每次使用密码登录时,都得按照如下的命令来连接服务器。这样显得有点不方便,因此推荐将密码设置复杂难以回溯,然后使用证书的形式来登录ssh服务器,免去了每次使用密码的麻烦。只要你把证书妥善保管,就会安全如初。
ssh user@hostname -p9876
本地生成证书
首先使用ssh-keygen
命令在本地生成证书,为了方便使用未设置证书密码。
$ ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (~/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ~/.ssh/id_ed25519
Your public key has been saved in ~/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:Kcd0LM......Vams1XJA user@op36
The key's randomart image is:
+--[ED25519 256]--+
| cef+.=.. |
| ..oEo+.X |
| aaaa+o O |
| obbbb= B |
|cccccc= S . |
|dddd + . |
|O w |
| o |
| |
+----[SHA256]-----+
设置SSH服务
使用scp
或者其他方法将本地的public key文件~/.ssh/id_ed25519.pub
上传至服务器。
scp -P 9876 ~/.ssh/id_ed25519.pub root@hostname:/root/
登录服务器,将/root/id_ed25519.pub
复制到~/.ssh/authorized_keys
cat id_ed25519.pub ~/.ssh/authorized_keys
修改/etc/ssh/sshd_config
文件配置SSH服务
vi /etc/ssh/sshd_config
## 去掉以下行前注释符(#)
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
接下来重启SSH服务即可
/etc/init.d/ssh restart
### 或者
systemctl restart ssh.service
接下来使用ssh user@hostname -p9876
连接服务器试下是否不输入密码成功登录。
在证书可以登录服务器后,可以考虑禁用密码登录以提高安全性。
vi /etc/ssh/sshd_config
## 去掉以下行前注释符(#)
PasswordAuthentication no
本地登录SSH小技巧
为了不每次输入ssh user@hostname -p9876
长串的命令,我们可以在~/.ssh/config
中设置服务器别名来快捷登录
vi ~/.ssh/config
Host abc #自定义别名
User root #用户名
Hostname hostname #服务器地址
Port 9876 #端口号
IdentityFile ~/.ssh/id_ed25519 #本地证书
设置完成后,就可以使用ssh abc
这样简介的方式来连接服务器了。