跳至内容

ssh通过密钥登录的方法

发布日期:
作者:
评论数:暂无评论

一:生成密钥对

1. 如果本地端是Windows系统,打开cmd,如果是Linux发行版打开自带的terminal,输入下面命令

ssh-keygen

可以按回车用默认的设置,也可以根据提示自定义密钥文件的位置和名称。默认情况下, Windows密钥会保存在c:\user\你的用户名\.ssh\目录下(下面都假设你用了默认路径),Linux发行版会保存在~/.ssh下,在过程中推荐添加密码短语(passphrase),这样即使私钥泄露了,如果不知道密码短语,也无法使用私钥登录服务器。如果你不需要密码短语,到这一步时无需输入直接按回车即可。

2. 保存密钥对,在保存的目录下,你会看到两个文件:

  • id_rsa : 私钥
  • id_rsa.pub:公钥

或者:

  • id_ed25519 : 私钥
  • id_ed25519.pub:公钥

取决于你的系统或openssh版本,旧的默认是RSA, 新的默认是ed25519,也可以通过命令指定:

如果要指定为rsa:

ssh-keygen -t rsa

如果要指定为ed25519:

ssh-keygen -t ed25519

二:将公钥上传至服务器

1. 使用scp命令上传公钥到服务器需要密钥登录的用户的.ssh目录,并重命名为authorized_keys

在cmd/terminal 中输入命令:

scp c:\Users\你的用户名\.ssh\id_rsa.pub user@remote_host:/home/user/.ssh/authorized_keys

这样用户user的公钥就上传成功了(将命令里的路径换成自己公钥的对应路径,里面的user替换成自己的用户名,公钥文件换成对应的名字)。

或者可以直接在本地打开公钥文件,然后在服务器用vi或nano编辑/home/user/.ssh/authorized_keys文件(将user替换成自己的用户名),将公钥内容写入进去,然后给予该文件600权限:

sudo chmod 600 /home/user/.ssh/authorized_keys

三、测试用户user使用密钥对登录服务器

1. 首先确认服务器ssh配置文件开启了密钥登录

sudo vi /etc/ssh/sshd_config

如果能找到下面这行并且为yes表示开启了密钥登录:

PubkeyAuthentication yes

2. 在本地cmd/terminal中输入以下命令即可登录:

ssh -i c:\Users\你的用户名\.ssh\id_rsa user@remote_host

注意密钥的路径替换成自己的,如果在生成密钥对的时候添加了密码短语,回车后还需要输入密码短语才能登录服务器。

首次使用密钥登录需要指定私钥路径,以后登录直接ssh user@remote_host即可。

四、 服务器禁用ssh密码登录的方法(可选,但建议)

编辑 SSH 配置文件/etc/ssh/sshd_config:

sudo vi /etc/ssh/sshd_config

找到以下行将yes改为no并且去掉注释:

PasswordAuthentication no

重启 SSH 服务生效:

sudo systemctl restart ssh

五、 授予用户免密执行 sudo 的权限(可选,设置后会更方便,但自行评估安全)

/etc/sudoers.d/ 目录下新建一个文件(文件名字可以随便起,方便自己识别,但不能包含句点 .,且通常不建议以 ~ 结尾):

sudo visudo -f /etc/sudoers.d/myuser

注意:一定要用 visudo -f,它会在保存时检查语法,如果你的配置写错了,它会报错并阻止保存,防止你把系统锁死。

在文件中写入(将myuser替换成自己的用户名):

myuser ALL=(ALL) NOPASSWD:ALL

保存并退出。

修改该文件权限为440:

sudo chmod 440 /etc/sudoers.d/myuser

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注