如何配置ssh免密登陆(ssh免密登录设置)

最近在用scp命令传文件,老弹出输入密码提示,不胜其烦,于是研究了一下,发现网上的配置教程比较零散,而且没有解决 我的问题,研究了一番终于有了结果,做个笔记,也给需要的新手一些指引。

1. 服务器配置修改(非root用户可跳过)

很多服务器为了安全不允许root免密登陆,如果你需要root免密登录,需要修改服务器的ssh配置文件

**如果你是公司服务器,请不要做此操作**sudo vi /etc/ssh/sshd_config

修改以下参数,有#号的去掉前面的#号

PermitRootLogin yes PermitEmptyPasswords yes

然后重启ssh服务

service sshd restart

2. 生成公钥

#生成id_rsa id_rsa.pub 一个公钥一个私钥 ssh-keygen -t rsa #将公钥上传到服务器 ssh-copy-id root@< you ip addr > #在服务器.ssh目录下创建认证文件authorized_keys,并将公钥写入authorized_keys cat id_rsa.pub >> authorized_keys #现在可通过 ssh root@< you ip addr > 直接登陆服务器

注意

如果手动指定了公钥的路径或文件名,需要手动将公钥上传到服务器的~/.ssh目录下,如:scp ~/.ssh/centos_id_rsa.pub root@< you ip addr >:~/.ssh

ssh-keygen常用参数

-t:指定生成密钥的类型,默认使用SSH2d的rsa

-f:指定生成密钥的文件名,默训id_rsa(私钥id_rsa,公钥id_rsa.pub)

-P:提供旧密码,空表示不需要密码

-N:提供新密码,空表示不需要密码

-b:指定密钥长度 (bits),RSA最小要求768位,默认是2048位;DSA密钥必须是1024位 (FIPS 1862标准规定)

-C:提供一个新注释

-R hostname:从known_host(第一次连接时就会在~/.ssh目录下生产该密钥文件)文件中删除所有属于hostname的密钥

3. 创建登陆配置文件

本机创建ssh登陆配置

cd ~/.ssh cat >config <<EOF Host centos Hostname 172.16.225.37 Port 22 User root IdentityFile ~/.ssh/centos_id_rsa Host centos Hostname 172.16.225.37 Port 22 User herff IdentityFile ~/.ssh/centos_id_rsa EOF

- cenos 主机别名(可以取代IP用作登陆,见下面的效果演示)

- Hostname IP地址或网址(换成你服务器的IP)

- Port 端口(生产环境的端口不可能是22,请根据实际情况需要)

- Use 用户名,如果本机用户名与远程不一致,要创建两个

- IdentityFile 本机的公钥路径(注意修改过的文件)

配置完成试试效果

ssh centos #➜ ~ ssh centos #Last login: Sat Dec 11 17:16:06 2021 from gateway #[root@centos7 ~]#

完美~

我一直没有网上找到答案的问题是,我本机用户名是herff,虚拟机Linux是root用户登陆,虽然可以通过 ssh root@172.16.225.37 免密登录,但这还不够,这一步的关键就是要在本机的配置文件里同时加入本机和Linux的root用户配置,这样问题就解决了,希望对大家所帮助。