场景:有一台linux服务器A,需要在另一台服务器B上免密连接,通过ssh执行脚本或scp推送文件,但我们并没有A服务器的root账号密码,只有一个普通账号user1的用户名和密码。
看了网上的很多文章和AI,通过ssh-keygen命令生成的秘钥始终无法成功免密连接。经过反复尝试,终于成功了。
如果想用B免密连接A,需要在B服务器上生成密钥,并放到A服务器的authorized_key文件中。
具体步骤:
1、在B服务器上执行:
ssh-keygen -t rsa -b 2048
之后就是一路回车即可,会在系统的用户文件夹下的.ssh文件夹中,生成出id_rsa 和id_rsa.pub文件。windows服务器即在C:/用户/用户名/.ssh/下,linux服务器一般在/root/.ssh/下,非root用户会在/home/用户名/.ssh下。
2、将上一步生成的id_rsa.pub文件中的内容复制到A服务器上/home/用户名/.ssh/authorized_key文件中。
因为我们没有root账号密码,在使用普通账号时,无法进入到/home/用户名/.ssh文件夹,此时需要先使用sudo su root命令获取root权限。重点操作来了:
①、首先需要把/home/用户名/.ssh文件夹的所有人改为普通用户
cd /home/user1/
chown user1 .ssh
chmod 700 .ssh
②、将B服务器的公钥内容写到.ssh下的authorized_key文件中
# 初次进入,应该没有authorized_key文件,需要手动创建
cd .ssh
vi authorized_keys
:wq #保存退出
③、然后需要将 .ssh文件夹下的文件修改所有者及权限
# 将ssh文件夹下的文件拥有者设置为user1,并修改权限为600,一定要是600,权限高了在后面执行连接操作时会报错。
chown user1 ./*
chmod 600 ./*
此时就应该大功告成了,可以在B服务器上执行 ssh user1@A服务器ip 进行测试,若直接进入到服务器命令行界面即为成功。我的是windows服务器:

总结:之前失败主要是困在了权限问题。权限给低了,user1无法访问,权限给高了又会报错。后来想了下,应该需要指定文件所有者,这样即使分配了700和600的权限,就也可以访问了。果然配置了文件所有者后,问题就解决了。
961






