#小老百姓用Linux# 给远程服务器设置SSH+Key免密码登录

in #cn7 years ago (edited)

最近新入手一台VPS,为了安全以及远程连接方便,打算设置成使用SSH+Key免密码登录。作为非程序员IT小白,Google了不少教程,按自己的折腾过程,汇总成下面的步骤,作为以后再搞机的指南。

主要参考豆比根据地的教程。

1.远程服务器上生成密钥对

用SSH连接远程服务器后,执行一下命令:

ssh-keygen

终端中会出现提示:

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): #输入生成私钥文件位置

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase): #为私钥加密

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub. #生成公钥文件位置

The key fingerprint is:

7c:25:bd:54:f5:fc:60:c0:86:c1:a0:32:7d:8a:80:c4 root@debian

The key's randomart image is:

+--[ RSA 2048]----+

| .o.+..o..|

| o . . o o+ o.|

.......

2.远程服务器上配制公钥

要用SSH Key登录,需将远程服务器上的公钥名字改成authorized_keys。

cd .ssh
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys       #修改公钥为只有属主有读写权限(安全考虑)
chmod 700 ~/.ssh                #修改.SSH目录为只有属主有读、写、执行权限(安全考虑)

3.本地电脑上配制私钥

3.1从远程服务器上,取回私钥到本地电脑

仍然SSH连接远程服务器,执行一下命令显示私钥文件内容。

cat /root/.ssh/id_rsa

终端中会显示类似内容:

-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: AES-128-CBC,EA47822BC49A9E56338A99D07084DA38

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

...

-----END RSA PRIVATE KEY-----

在本地电脑新建一文本文件,名字随便取,不要后缀名。将上面内容复制粘贴到新建的文件中,保存推出。这个文件便是你的私钥文件,将它放到你想放置的位置,一般放在~/.ssh中。注意,一定要备份。

3.2本地电脑上给私钥文件重新设置权限

这一步解决的问题其实是最后才遇到的。当时做好所有配制后,用SSH Key登录远程服务器,终端中显示下面内容:

Permissions 0644 for 'id_rsa' are too open.

It is required that your private key files are NOT accessible by others.

This private key will be ignored.

就是说本地电脑上的私钥文件权限太大,被忽略使用。继续Google之,在本地电脑上执行以下命令,修改私钥文件的权限。

chmod 0600 id_rsa

OK,这样就可以用SSH Key顺利登录了。

4.远程服务器上修改SSH配制

如果不打算禁止使用SSH+密码登录远程服务器,这一步也可在第2步后进行。

4.1开启SSH+Key登录

SSH连接远程服务器,用vi打开SSH的配制文件。

vi /etc/ssh/sshd_config

此时终端中显示sshd_config配制文件内容。方向键移动光标,找到一下两个参数。

RSAAuthentication no

PubkeyAuthentication no

按键盘上I键,进入vi的插入模式,将以上两个参数后的no改为yes(一般默认就是yes不用改)。

4.2关闭SSH密码登录

用密码登录远程服务器终归有风险,有可能被黑客给爆掉,所以最好禁止使用SSH+密码登录远程服务器。

继续在vi插入模式下移动光标,找到以下参数。

# PasswordAuthentication yes

将#删除,参数后面的yes改为no。然后按ESC键推出vi插入模式,接着输入:进入vi命令行模式,输入wq,回车保存退出vi。

4.3重启远程服务器SSH服务

SSH配制好后,重启生效。

/etc/init.d/ssh restart

5.用SSH+Key登录远程服务器

现在退出之前与远程服务器的连接,再用SSH+密码连接,会提示连接被拒绝。

用SSH+Key登录:

ssh root@xxx.xxx.xxx.xxx -p aaa -i ~/.ssh/id_rsa

xxx.xxx.xxx.xxx:远程服务器IP

aaa:端口

~/.ssh/id_rsa:本地电脑上私钥文件地址(按自己的修改)

以上命令连接服务器过程中,终端会提示输入之前生成密钥对时,设定的私钥密码。

如此,以后连接VPS就不用再输入密码了。

参考资料

《Linux 更换密码登陆方式 为使用 Key 密匙安全登陆,避免被暴力破解密码》-豆比根据地:https://doub.io/linux-jc9/

《Permission 0644 for /root/.ssh/id_rsa Are Too Open 解决办法》:https://cnbin.github.io/blog/2015/06/18/permission-0644-for-slash-root-slash-dot-ssh-slash-id-rsa-are-too-open-jie-jue-ban-fa/