#小老百姓用Linux# 给远程服务器设置SSH+Key免密码登录
最近新入手一台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 [email protected] -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/