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 文件中公钥也别乱修改,否则一旦有问题就登录不了服务器,麻烦就大了!(密码禁用谨慎操作)