zoukankan      html  css  js  c++  java
  • Linux ssh相关

    修改ssh的端口

    没有安装semanage的话,需要安装

    yum install semanage
    yum provides semanage 
    yum -y install policycoreutils-python.x86_64
    
    1. 查看安全组允许的ssh端口
    semanage port -l | grep ssh
    
    1. 添加 24567端口为ssh的端口
    semanage port -a -t ssh_port_t -p tcp 24567
    
    1. 修改ssh端口并禁用root远程登录
    vim /etc/ssh/sshd_config
    # 这里是修改ssh的端口
    Port 24567
    # 这里是禁止root远程登录
    PermitRootLogin no 
    
    1. 重启ssh服务
    重启ssh服务
    service sshd restart
    查看ssh服务运行状态
    service sshd status
    

    免密登录

    生成 ssh 私钥和公钥
    ssh-keygen -t rsa
    
    # 创建服务器公钥
    touch ~/.ssh/authorized_keys
    # 添加公钥到文件
    cd .ssh
    cat .ssh/id_rsa.pub > .ssh/authorized_keys
    # ssh目录权限是700
    # authorized_keys 目录的权限是600
    
    ssh-copy-id username@remote_server
    
    

    原理

    1. 客户端向服务器发送链接请求
    2. 服务器向客户端发出自己的公钥
    3. 客户端使用服务端的公钥加密通信秘钥后发送给服务端
    4. 如果通讯过程被截获,由于其听着即使知道公钥和经过公钥加密的内容,但不拥有私钥依然无法解密(RSA算法)
    5. 服务器接收到密文后,使用私钥解密,获知通讯秘钥
    6. ssh-keygen命令给服务器端产生的公司要秘钥对

    SSH 反向隧道

    实现原理

    实现步骤

    假设 A(公网) B(局域网)

    在 B 这台机器上

    # ssh -vnNT -R 公网机器需要监听的端口:localhost:本地机器需要的端口 username@公网机器的IP
    ssh -vnNT -R 6789:localhost:8080 ifan@AIP
    

    在 A 这台机器上 添加 nginx

    upstream tunnel {
      server 127.0.0.1:6789;
    }
    
    server {
      listen 80;
      
      location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    
        proxy_pass http://tunnel;
      }
    }
    

    autossh

    实现步骤

    1. 下载
    wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/a/autossh-1.4e-1.el7.x86_64.rpm
    
    1. 安装
    rpm -ivh autossh-1.4e-1.el7.x86_64.rpm
    
    1. 启动
    autossh -M 16789 -NR 6789:localhost:3000 root@47.112.26.187
    

    -M 5678: 通过5678端口监视连接状态,连接有问题时就会自动重连

    -N:不允许执行远程命令,只做端口转发 Do not execute a remote command. This is useful for just forwarding ports (protocol version 2 only).

    -R 8888:localhost:80: 将 B 主机的80端口和 VPS 的8888端口绑定,相当于远程端口映射

    1. 实现开机启动
    cd /usr/lib/systemd/system
    touch autossh.service
    vi autossh.service
    

    autossh.service 内容

    [Unit]
    Description=autossh.service
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=simple
    PIDFile=/run/autossh.pid
    ExecStart=/usr/bin/autossh -M 5678 -NR 8888:localhost:80 root@huzhifeng.com
    Restart=/bin/kill -s QUIT $MAINPID && /usr/bin/autossh -M 5678 -NR 8888:localhost:80 root@huzhifeng.com
    ExecReload=
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    RemainAfterExit=yes
    ExecStartPre=
    
    [Install]
    WantedBy=multi-user.target
    

    设置开机启动

    systemctl enable autossh.service
    

    启动服务

    systemctl start autossh
    

    反向隧道 HTTP

    首先我们需要有一台公网主机作为跳板,这台主机是可以公网访问的,我们将其命名为 B,它的 IP 假设为 10.10.10.10。

    所以两台机器网络配置如下:

    A 内网机器

    • IP:192.168.1.2
    • SSH端口: 22
    • 用户名:usera
    • 密码:passworda
    • 内网配置端口:22(即配置 SSH 端口的反向隧道)

    B 公网机器

    • IP:10.10.10.10
    • SSH端口: 22
    • 用户名:userb
    • 密码:passwordb
    • 公网端口:22001(即用 B 的 22001 端口连到 A 的 SSH 22 端口)

    配置SSH秘钥

    首先我们需要在 A 主机上生成 SSH 秘钥,和 B 用 SSH 建立认证。

    首先在主机 A 上执行如下命令生成 SSH 秘钥:

    1 ssh-keygen -t rsa -C "your@email.com"

    命令里面的邮箱需要自行更换。

    然后利用如下命令将 A 的 SSH 秘钥添加到 B 的 authorized_keys 里面:

    1 ssh-copy-id userb@10.10.10.10

    执行后会提示输入主机 B 的密码,执行完毕之后,我们登录到 B,就发现 authorized_keys 里面就多了 A 的 SSH 公钥了,成功建立 SSH 认证。

    B 主机配置

    B 主机需要更改 /etc/ssh/sshd_config 文件,修改如下一行:

    1 GatewayPorts yes

    这样可以把监听的端口绑定到任意IP 0.0.0.0上,否则只有本机 127.0.0.1 可以访问。

    然后重启 sshd 服务:

    1 sudo service sshd restart

    A 主机配置

    主机 A 再安装一个 AutoSSH,以 Ubuntu 为例,命令如下:

    1 sudo apt-get install autossh

    然后执行如下命令即可完成反向 SSH 配置:

    1 autossh -M 55555 -NfR 0.0.0.0:22001:localhost:22 userb@10.10.10.10

    这里 -M 后面任意填写一个可用端口即可,-N 代表只建立连接,不打开shell ,-f 代表建立成功后在后台运行,-R 代表指定端口映射。

    这里是将 A 主机的 22 端口映射到 B 主机的 22001 端口,这样就完成了配置。

    主要我们再访问 B 主机的 22001 端口,就会自动转发到 A 主机的 22 端口了,即可以公网访问了。

    连接测试

    接下来 SSH 测试连接 A 主机即可:

    1 ssh usera@10.10.10.10 -p 22001

    输入密码,完成连接。

  • 相关阅读:
    进程
    Visual Studio Code 使用教程
    C# 多线程中的lock与token模式
    JavaScript中的多态
    简说GC垃圾回收
    C# 简单的SQLHelper
    JavaScript中addEventListener/attachEvent 与内联事件
    JavaScript中事件冒泡与事件捕获
    ASP.Net ScriptManager 与 UpdatePanel
    Nhibernate 使用sql语句查询
  • 原文地址:https://www.cnblogs.com/iFanLiwei/p/12819944.html
Copyright © 2011-2022 走看看