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

  • 相关阅读:
    linux du命令
    Linux vmstat命令实战详解
    linux sar命令详解
    xargs 命令教程
    Linux中find命令用法大全
    python suprocess
    Python的f-strings格式化
    python glob的使用
    python getopt()的使用
    Java测试的题目感想
  • 原文地址:https://www.cnblogs.com/A-Nan-q/p/15400829.html
Copyright © 2020-2023  润新知