ssh免密

阿里云ssh免密配置

由于阿里云服务器中mysql服务内存使用比较大,所以我把mysql搬到刀片机上通过堡垒机端口映射对外开放服务端口,同时通过脚本定时任务远程拷贝mysql备份数据到我的阿里云服务器。

1、查看是否安装ssh

rpm -qa | grep ssh
1、安装
yum install -y openssl openssh-server
2、安装成功,启动ssh
systemctl start sshd.service
3、设置ssh开机自启动:
systemctl enable sshd.service

2、生成密钥对

ssh-keygen  -t  rsa

此时在当前用户目录下回生成.ssh文件夹 查看

 ll -a     #查看全部文件  .ssh为隐藏文件
 
在.ssh文件中可以看到公钥和私钥,以及存放免密公钥的文件
id_rsa  id_rsa.pub	authorized_keys

3、配置ssh免密,用 ssh-copy-id 把公钥复制到远程主机上

ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@需要免密远程的服务器ip   (这里如果只写需要免密远程的服务器ip地址的话默认是root用户及文件目录下 )

Permission denied 如果执行完命令发现报错了,远程被拒绝写入,是因为阿里云服务器的authorized_keys 只有读权限,没有写权限。

在阿里云服务器中进行赋权

chmod 600 authorized_keys

但会报chmod: changing permissions of ‘authorized_keys’: Operation not permitted

即使是使用sudo命令也不行,因为chmod 的底层实现是 chattr 命令,用此命的功能更为强大,甚至可以锁定文件,即使 root 用户也操作不了此文件。

然后执行下面的命令查看当前文件属性,可以发现有 i 和 a 两个属性:

[root@localhost .ssh]# lsattr authorized_keys
----ia-------e-- authorized_keys

需要先去掉这两个属性:

chattr -ia authorized_keys    (减号(-)代表去掉的意思,反之加号(+)代表增加的意思)

在进行赋权chmod 600 authorized_keys

最后再锁定文件:

chattr +ia authorized_keys 

执行ssh免密命令遇见提示直接回车继续,

上面的命令方式拷贝使用的端口是Linux默认的22,如果你想指定端口,可以使用:

ssh-copy-id -i /用户名/.ssh/id_rsa.pub '-p 端口号 用户名@服务器ip'

用户名@服务器ip's password:输入服务器用户密码

输入完密码后,显示:

Now try logging into the machine, with "ssh '-p 端口号 root@ip'", and check in:
.ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.

表示成功了!

配置免密成功后进行ssh 用户@服务器ip如果发现还需要输入密码时,就需要去连接对象的B服务器去查看日志

tail /var/log/secure  (实时查看日志)

如发现报错是:Authentication refused: bad ownership or modes for file /root/.ssh/authorized_keys

从字面上可以看出是目录的属主和权限配置不当,查找资料得知:SSH不希望home目录和~/.ssh目录对组有写权限,通过下面几条命令改下

chmod g-w /root
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

还可以通过在 ssh 命令后添加调试参数 -vvv 来查看调试信息(eg: ssh -vvv localhost 便会以调试模式来执行本次ssh命令),以此来更好的定位问题。

Authentication refused: bad ownership or modes for file /home/aaa/.ssh/authorized_keys

sshd为了安全,对属主的目录和文件权限有所要求。如果权限不对,则ssh的免密码登陆不生效。

    用户目录权限为 755 或者 700,就是不能是77x。

    .ssh目录权限一般为755或者700。

    rsa_id.pub 及authorized_keys权限一般为644

    rsa_id权限必须为600

设置命令的别名-简化命令

输入完命令后直接回车,就可以登录阿里云服务器了,不用输入密码特别方便。

为了简化命令,我们可以设置一个 alias。

用 vim 编辑你本地的 .bash_profile 文件,我用的是 zsh,所以编辑的是 .zshrc 文件。

加入如下代码:

# 设置命令的别名
# 阿里云
alias ali='ssh root@xxx.xxx.xxx.xxx'

xxx.xxx.xxx.xxx 替换为你的阿里云的公网 ip 地址。

然后让刚才修改的配置生效,执行下面的命令:

source .zshrc

修改完成后需要重新打开当前的 shell 或者新开一个 Tab 窗口。

然后输入命令:

ali

直接回车就可以登录阿里云服务器了,特别方便和快捷。

但是这里有个问题,我们既然设置了使用公私钥验证登录服务器,那么我们就可以禁用掉使用密码登录服务器的这种方式了。

这样做有个好处就是当你的阿里云登录密码不小心别泄露出去了,别人也是登录不上去的,所以更加安全。

登录服务器,修改 /etc/ssh/sshd_config 文件:

vim /etc/ssh/sshd_config

找到其中 3 行命令更改,前面若带 #,就删掉,作用是可以用密钥登陆服务器:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

然后修改 PasswordAuthentication 属性为 no,即禁用掉密码登陆:

PasswordAuthentication no

重启 sshd 服务:

systemctl restart sshd.service

温馨提示:本地公私密钥请保存好,服务器 authorized_keys 文件中公钥也别乱修改,否则一旦有问题就登录不了服务器,麻烦就大了!(密码禁用谨慎操作)

原文地址:https://www.cnblogs.com/A-Nan-q/p/15400829.html