ssh key登录Linux

生成ssh key

在Window下,可通过以下命令生成

1
ssh-keygen -t rsa -C "name@example.com"

Linux下

1
ssh-keygen -t rsa

生成过程中需要输入密码,密码为空直接回车即可。
然后得到id_rsa(私钥)、id_rsa.pub(公钥)。

ssh key登录

生成key后,将公钥上传到Linux服务器。对于需要使用ssh key进行登录的用户进行配置,以work为例。
在Linux服务器中:

1
2
3
4
5
6
7
8
9
10
# 切换到work目录
cd /home/work
# 创建.ssh目录
mkdir .ssh
#创建授权文件(可以将key上传之后,直接mv得到,以防复制出错。若生成秘钥使用的是ssh2,则还需新建authorized_keys2文件)
mv id_rsa.pub authorized_keys
mv id_rsa.pub authorized_keys2
# 修改权限(重要)
chmod 700 .ssh
chmod 644 .ssh/*

之后使用私钥即可登录work账户

常见错误

使用ssh 登录时,在客户端可能报错:

1
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

其实此类错误,主要查看ssh登录日志可发现大多数错误原因。
查看登录日志:

1
2
cd /var/log/
tail -f secure

可得知失败原因为:

1
2
3
Mar 23 10:18:40 iZ25t206jm9Z sshd[2826]: User git not allowed because account is locked
Mar 23 10:18:40 iZ25t206jm9Z sshd[2826]: input_userauth_request: invalid user git [preauth]
Mar 23 10:18:40 iZ25t206jm9Z sshd[2826]: Connection closed by 1.202.225.154 [preauth]

由于用户被锁。
stackoverflow中有解答,原因为:

On Linux systems, locked accounts are defined as those that have !! in the password field of /etc/shadow.
This is the default entry for accounts created with the useradd command.

原因是设置用户时,没有设置用户用户密码,导致用户被锁,设置用户密码或把密码域的!!改掉即可。