美文网首页
笔记:SSH更改端口、禁用密码、使用密钥登陆

笔记:SSH更改端口、禁用密码、使用密钥登陆

作者: black_history | 来源:发表于2019-12-27 21:17 被阅读0次
    1. 更改端口(范围:1~65535)
      比如更改为22222,首先需要查看22222端口是否开放。
      有多种方式:

      lsof -i:22222 # 必须以root用户执行
      netstat -ntulp |grep 22222 # 查看端口是否开放并查看监听端口的服务
      iptables -L|grep 22222 # 查看iptables规则
      firewall-cmd --list-ports # 查看所有开放的端口
      ufw status verbose|grep 2222
      

      如果未输出或输出的内容中不包含需要的端口,那么即是端口未开放,需要开放端口

      # firewalld方式
      
      # 添加
      # zone一般默认为public 可以不写
      # 查看默认zone
      firewall-cmd --get-default-zone
      # --permanent永久生效,没有此参数重启后失效
      firewall-cmd --zone=public --add-port=22222 /tcp --permanent 
      # 查看
      firewall-cmd --zone=public --query-port=22222 /tcp
      # 删除
      firewall-cmd --zone=public --remove-port=22222 /tcp --permanent
      
      # 添加/删除后 重新载入
      firewall-cmd --reload
      
      # iptables方式
      # centos7版本以下的方式,centos7及更高版本默认为firewalld方式
      # 非要在centos7+用iptables,就关闭 firewalld 服务并安装 iptables-service
      
      # 开放端口
      # 用 iptables -I 而不是 iptables -A
      # iptables -A 是规则末尾追加,可能导致因为已有规则使追加的规则无效
      # iptables -I 是规则开头插入,一般不会出问题
      iptables -I INPUT -p tcp --dport 22222 -j ACCEPT
      iptables -I OUTPUT -p tcp --sport 22222 -j ACCEPT
      
      # 关闭端口(删除规则)
      iptables -D INPUT -p tcp --dport 22222 -j ACCEPT
      iptables -D OUTPUT -p tcp --dport 22222 -j ACCEPT
      
      # 保存,不然服务器重启后会失效
      # centos7+ 不安装 iptables-service 的话,没有该命令
      service iptables save
      
      # 虽然在不安装 iptables-service 的情况下,iptables指令也生效(重启后会失效,因为没有保存的命令)
      # 但是firewalld并不会在其配置文件中记录,届时我们用firewalld命令查看端口会找不到
      
      # firewalld 和 iptables-service是一个层面的东西,它们都基于iptables这个软件
      # 它们的作用是一样的,不必纠结看个人习惯或者业务需求
      
      #  查看iptables软件是否安装(firewalld 和 iptables-service 都是基于它的)
      whereis iptables
      或者
      yum list installed|grep iptables
      

      在端口开放后修改sshd配置文件
      vi /etc/ssh/sshd_config
      找到 #Port 22
      然后插入一行
      Port 22222
      如果22端口还需要监听就取消#Port 22的注释
      保存后重启sshd
      systemctl restart sshd
      或者
      service sshd restart

      重启后查看端口
      netstat -ntulp |grep 22222
      看到sshd在监听说明ssh可以通过22222端口访问了

      查看日志
      centos下 cat /var/log/secure|grep 22222
      debian下 cat /var/log/auth.log|grep 22222
      看到

      Server listening on 0.0.0.0 port 22222.
      Server listening on :: port 22222.
      

      说明无异常
      此时可以通过22222端口ssh访问啦

    2. 启用密钥,禁止密码
      首先生成密钥,有两种方式
      ssh客户端工具和ssh-keygen命令

      客户端以mobaxterm为例:顶部菜单"Tools"下找到"MobaKeyGen",点击进入面板。然后点击"Generate"生成密钥,包括公钥和私钥。
      在要使用密钥的用户主目录的".ssh"目录下新建authorized_keys文件(如果不存在,如/root/.ssh/authorized_keys),把公钥字符串粘贴进去就好。
      然后导出私钥,默认.ppk格式,就是putty软件的那种格式。
      然后在客户端登陆时使用private key 并选择生成的密钥就可以登陆了。

      顶部菜单的"Conversions"可以选择生成其他格式的私钥(比如手机端juicessh需要openssh格式),我们选择"Export OpenSSH key",并将生成的私钥命名为"id_rsa"就行了。

      第二种ssh-keygen命令也很简单
      ssh-keygen -t rsa
      然后一路回车就好,不必输入密钥密码(如果怕私钥泄露可以设置密码,但是要记住,因为设置了密码后,登陆时除了验证私钥,还需要输入密码验证)
      /root/.ssh/目录下会新建两个文件,私钥id_rsa and 公钥id_rsa.pub

      再执行ssh-copy-id -i .ssh/id_rsa.pub -p22222 root@127.0.0.1
      然后输入密码,公钥会自动追加到authorized_keys这个文件里。
      如果执行该命令出现Permission denied (publickey).的错误,看看是不是禁止了密码登陆,不要禁用,等公钥添加完成后再禁用。
      当然,如果不想改配置文件,我们将公钥字符串手动追加(复制粘贴)到authorized_keys文件也是可以的。
      最后我们把生成的私钥下载到本地,在ssh客户端使用就好了。

      禁止密码登陆
      在使用密钥登陆无异常后,打开sshd配置文件
      vi /etc/ssh/sshd_config
      PasswordAuthentication yes改成PasswordAuthentication no
      重启sshd即可生效
      届时,如果我们使用密码登陆会提示:
      No supported authentication methods available (server sent: publickey)
      同时,sshd日志也会写入。

    其他问题:
    日志不输出:
    service rsyslog status查看syslog的状态,发现inactive(因为使sshd监听了未开放的端口,并取消了22的监听导致无法ssh,所以改了下配置文件重启了服务器,syslog并未设置开机启动)
    启动syslog就好了
    还可以设置其开机启动
    centos下
    systemctl enable rsyslogchkconfig rsyslog on
    执行systemctl list-unit-files|grep rsyslog,看到rsyslog的状态为enabled即是成功

    相关文章

      网友评论

          本文标题:笔记:SSH更改端口、禁用密码、使用密钥登陆

          本文链接:https://www.haomeiwen.com/subject/gppdoctx.html