SFTP/SSH/SCP访问设置Public Key认证,适用于centos\rhel\debian

这是一种认证方法,类似于常见的用户名密码认证方法。不同的是需要在客户端机器上保留一个很长很长的加密key,而在服务器端需要做出相应的配置。当客户端想要访问服务器时,服务器则会检查自身配置并根据客户端所提供的用户名来识别客户端。说白了就是实现了无密码访问,并同时兼有安全保障措施。

认证过程简要说明

Public key对数据进行加密而且只能用于加密,Private key只能对所匹配的Public key加密过的数据进行解密。我们把Public key放在远程系统合适的位置,然后从本地开始进行ssh连接。此时,远程的sshd会产生一个随机数并用我们产生的Public key进行加密后发给本地,本地会用Private key进行解密并把这个随机数发回给远程系统。最后,远程系统的sshd会得出结论我们拥有匹配的Private key允许我们登录。

客户端配置

一、使用客户端的用户登录,然后运行命令“ssh-keygen -t dsa”生成Public Key和Private Key,例子如下:

[root@someserver ~]# ssh-keygen -t dsa

Generating public/private dsa key pair.

Enter file in which to save the key (/root/.ssh/id_dsa): /root/.ssh/id_dsa

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

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

Your public key has been saved in /root/.ssh/id_dsa.pub.

The key fingerprint is:

blah:blah:blah:blah:blah:blah:blah:blah:blah:blah root@someserver

二、设置权限(root用户默认都OK的,新建其他用户后需要执行下)

chmod 700 ~/.ssh

chmod 600 ~/.ssh/id_rsa

chmod 644 ~/.ssh/id_rsa.pub

服务器端配置

一、从目录/etc/或/etc/ssh/或/etc/conf.d/中找到sshd_config文件,并用vi编辑器打开

二、启用RSAAuthentication和PubkeyAuthentication,并同时指定authorized_keys文件位置,设置如下:

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile ~/.ssh/authorized_keys(新建的用户要对应上)(但在debian中的~为%h不要改动,否则失败)

三、更新并保存sshd_config文件后,运行命令“service sshd restart”重新启动服务,不同版本Linux的服务启动方式见:http://theos.in/desktop-linux/tip-that-matters/how-do-i-restart-linux-network-service/

四、以上三步只是启用无密码验证功能,想要这个功能生效,还必须把客户端生成的Public Key配置到服务器的authorized_keys文件中去。把之前在客户端生成的id_rsa.pub文件内容拷贝到authorized_keys中(当然这个文件要新建,如果不想新建,可以参考ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3),如果有多个客户端,那么需要把每个客户端生成的Public Key都拷贝进来,注意换行,一个客户端一行。

测试

一、登录客户端,运行命令“ssh username@servername”,运行命令“ssh -vvv -o PreferredAuthentications=publickey username@servername”可以强制使用Public Key验证方法。(如果无法验证通过请看下key的内容,因为有的是fqdn需要本地解析下)

二、测试SFTP可以使用命令“sftp username@servername”

注意事项

.ssh目录的属主、属组使用当前用户与用户组

.ssh目录的权限请保持700

authorized_keys的权限为644

id_rsa的权限为600

id_rsa.pub的权限为644

检查用户$HOME目录权限必须为755

转载于: https://blog.51cto.com/481814/1429512